You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus原生应用构建失败求助:执行mvn package -Pnative报错

Quarkus原生应用构建失败问题解决

问题场景

执行mvn package -Pnative构建Quarkus原生应用时失败,核心错误为GraalVM原生镜像生成过程中大量Converter的provider()方法未找到,最终导致构建终止。

环境信息:

  • 系统:Windows 11
  • IDE:IntelliJ IDE
  • Java版本:17
  • GraalVM版本:graalvm-jdk-17.0.12+8.1
  • Quarkus版本:3.28.2

错误日志

[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:3.28.2:build (default) on project rest-book: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]         [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: io.quarkus.deployment.pkg.steps.NativeImageBuildStep$ImageGenerationFailureException: Image generation failed
[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:498)
[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:289)
[ERROR]         at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)
[ERROR]         at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:874)
[ERROR]         at io.quarkus.builder.BuildContext.run(BuildContext.java:255)
[ERROR]         at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
[ERROR]         at java.base/java.lang.Thread.run(Thread.java:842)
[ERROR]         at org.jboss.threads.JBossThread.run(JBossThread.java:501)
[ERROR] Caused by: io.smallrye.common.process.AbnormalExitException: Process exited abnormally (pid 20504) with exit code 1 with error output:
[ERROR]  > Warning: Method io.quarkus.runtime.logging.LevelConverter.provider() not found.
[ERROR]  > Warning: Method io.quarkus.runtime.configuration.CharsetConverter.provider() not found.
[ERROR]  > Warning: Method io.quarkus.runtime.configuration.MemorySizeConverter.provider() not found.
[ERROR]  > Warning: Method io.quarkus.runtime.configuration.InetSocketAddressConverter.provider() not found.
[ERROR]  > Warning: Method io.quarkus.vertx.http.runtime.TrustedProxyCheckPartConverter.provider() not found.
[ERROR]  > … (skipped 199 line(s)) …
[ERROR]  > 
[ERROR]  > 
[ERROR]  >      at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:129)
[ERROR]  >      at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:793)
[ERROR]  >      ... 6 more
[ERROR]         at io.smallrye.common.process.PipelineRunner.collectProblems(PipelineRunner.java:559)
[ERROR]         at io.smallrye.common.process.ProcessRunner.complete(ProcessRunner.java:165)
[ERROR]         at io.smallrye.common.process.ProcessRunner.run(ProcessRunner.java:95)
[ERROR]         at io.smallrye.common.process.ProcessBuilderImpl.run(ProcessBuilderImpl.java:199)
[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildRunner.build(NativeImageBuildRunner.java:77)
[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:283)
[ERROR]         ... 10 more
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the '-e' switch
[ERROR] Re-run Maven using the '-X' switch to enable verbose output
[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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.quarkus.starting</groupId>
    <artifactId>rest-book</artifactId>
    <version>1.0.0</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.parameters>true</maven.compiler.parameters>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
        <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
        <quarkus.platform.version>3.28.2</quarkus.platform.version>
        <compiler-plugin.version>3.14.0</compiler-plugin.version>
        <skipITs>true</skipITs>
        <surefire-plugin.version>3.5.4</surefire-plugin.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>${quarkus.platform.group-id}</groupId>
                <artifactId>${quarkus.platform.artifact-id}</artifactId>
                <version>${quarkus.platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-jsonb</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>${quarkus.platform.group-id}</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus.platform.version}</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                            <goal>generate-code</goal>
                            <goal>generate-code-tests</goal>
                            <goal>native-image-agent</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler-plugin.version}</version>
                <configuration>
                    <parameters>true</parameters>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <configuration>
                    <systemPropertyVariables>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        <maven.home>${maven.home}</maven.home>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        <maven.home>${maven.home}</maven.home>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <properties>
                <quarkus.native.enabled>true</quarkus.native.enabled>
                <quarkus.package.jar.enabled>false</quarkus.package.jar.enabled>
                <skipITs>false</skipITs>
            </properties>
        </profile>
    </profiles>
</project>

解决方案

1. 统一Java编译版本

当前pom.xml配置的编译版本为Java 11,但实际运行环境是Java 17,版本不一致会导致字节码兼容性问题。修改pom.xml中的编译参数:

<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>

2. 移除不必要的插件目标

native-image-agent目标用于生成原生镜像的反射配置,不应包含在build阶段的执行目标中。修改quarkus-maven-plugin的executions:

<executions>
    <execution>
        <goals>
            <goal>build</goal>
            <goal>generate-code</goal>
            <goal>generate-code-tests</goal>
        </goals>
    </execution>
</executions>

3. 升级GraalVM版本

Quarkus 3.28.x推荐使用GraalVM 24.0.x版本(与Java 17兼容),旧版本GraalVM可能存在与新版本Quarkus的兼容性问题。下载对应版本的GraalVM并配置环境变量,确保GRAALVM_HOME指向正确路径。

4. 生成正确的原生镜像配置(可选)

如果上述步骤仍未解决问题,使用native image agent自动生成反射、资源等配置:

  • 启动Quarkus开发模式:mvn quarkus:dev
  • 访问应用所有接口,触发所有需要反射的代码路径
  • 执行命令生成配置:mvn quarkus:native-image-agent
  • 生成的配置文件会放在target/native-image-agent-output目录,将其复制到src/main/resources/META-INF/native-image下

5. 清理缓存后重新构建

执行以下命令清理本地构建缓存并重新构建:

mvn clean package -Pnative

内容的提问来源于stack exchange,提问作者Ferid Raouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:40:55