构建Micronaut应用GraalVM Native Image失败求助
问题:构建Micronaut应用GraalVM Native Image失败
- 运行环境:Windows 11系统,同时在Ubuntu子系统中测试,结果一致
- GraalVM版本:
graalvm-ce-java17-22.2.0 - 测试范围:个人项目及官方入门示例均构建失败
- 执行命令:
./mvnw package -Dpackaging=native-image -X
错误日志
[ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.9.13:build (default-build) on project micronautguide: Execution of /usr/lib/jvm/graalvm-ce-java17-22.2.0/bin/native-image -cp /mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target/micronautguide-0.1-shaded.jar --no-fallback -H:Path=/mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target -H:Name=micronautguide -H:Class=example.micronaut.Application returned non-zero result -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.9.13:build (default-build) on project micronautguide: Execution of /usr/lib/jvm/graalvm-ce-java17-22.2.0/bin/native-image -cp /mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target/micronautguide-0.1-shaded.jar --no-fallback -H:Path=/mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target -H:Name=micronautguide -H:Class=example.micronaut.Application returned non-zero result at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:39) at org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:122) at org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:61) Caused by: org.apache.maven.plugin.MojoExecutionException: Execution of /usr/lib/jvm/graalvm-ce-java17-22.2.0/bin/native-image -cp /mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target/micronautguide-0.1-shaded.jar --no-fallback -H:Path=/mnt/c/Users/Kinsl/Downloads/Compressed/micronaut-creating-first-graal-app-maven-java/target -H:Name=micronautguide -H:Class=example.micronaut.Application returned non-zero result at org.graalvm.buildtools.maven.AbstractNativeMojo.buildImage (AbstractNativeMojo.java:415) at org.graalvm.buildtools.maven.NativeBuildMojo.execute (NativeBuildMojo.java:91) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:39) at org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:122) at org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:61) [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
当前pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>example.micronaut</groupId> <artifactId>micronautguide</artifactId> <version>0.1</version> <packaging>${packaging}</packaging> <parent> <groupId>io.micronaut</groupId> <artifactId>micronaut-parent</artifactId> <version>3.7.3</version> </parent> <properties> <packaging>jar</packaging> <jdk.version>11</jdk.version> <release.version>11</release.version> <micronaut.version>3.7.3</micronaut.version> <micronaut.runtime>netty</micronaut.runtime> <exec.mainClass>example.micronaut.Application</exec.mainClass> </properties> <repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <dependencies> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-inject</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-validation</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-http-client</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-http-server-netty</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-runtime</artifactId> <scope>compile</scope> <exclusions> <exclusion> <groupId>io.micronaut</groupId> <artifactId>micronaut-jackson-databind</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.micronaut.serde</groupId> <artifactId>micronaut-serde-jackson</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>io.micronaut.test</groupId> <artifactId>micronaut-test-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>io.micronaut.build</groupId> <artifactId>micronaut-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>shaded</shadedClassifierName> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <configuration combine.self="override"> <mainClass>${exec.mainClass}</mainClass> <classpath> <param>${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar</param> </classpath> </configuration> </plugin> </plugins> </build> </project>
解决方案
1. 修复版本兼容性
Micronaut 3.7.3与GraalVM 22.2.0存在适配问题,二选一执行:
- 升级GraalVM至
22.3.x版本(与Micronaut 3.7.x官方推荐匹配) - 升级Micronaut至
4.x版本,搭配GraalVM 23.x或更高版本
2. 移除冲突的maven-shade-plugin
Micronaut Maven插件已自动处理打包逻辑,手动添加的shade插件会破坏Native Image所需的元数据,删除pom中所有maven-shade-plugin配置块。
3. 简化native-maven-plugin配置
删除强制覆盖配置和手动指定的classpath,让插件自动识别依赖:
<plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <configuration> <mainClass>${exec.mainClass}</mainClass> </configuration> </plugin>
4. 补充WSL系统依赖
在Ubuntu子系统中安装Native Image构建所需的底层工具:
sudo apt update && sudo apt install build-essential libz-dev zlib1g-dev -y
5. 重新执行构建
清理旧产物后重新构建:
./mvnw clean package -Dpackaging=native-image
内容的提问来源于stack exchange,提问作者kinsley kajiva
相关产品推荐
相关产品推荐

