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

Maven构建Quarkus项目未生成-runner.jar问题求助

Quarkus构建仅生成普通Jar,未生成Runner Jar的排查方案

问题场景

通过原型生成Quarkus项目后,执行命令./mvnw -Dskiptests clean package构建,预期生成普通Jar和可执行的runner Jar,但实际仅得到普通Jar。已配置JAVA_HOME和GRAALVM_HOME指向GraalVM并安装Native Image,操作系统为Ubuntu。构建日志如下:

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------< es.olivar.jaen:atomic-fruit-service >-----------------
[INFO] Building atomic-fruit-service 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ atomic-fruit-service ---
[INFO] Deleting /home/sobremesa/Documents/Develop/java/quarkus/poc/atomic-fruit-service/target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ atomic-fruit-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- quarkus-maven-plugin:2.11.3.Final:generate-code (default) @ atomic-fruit-service ---
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ atomic-fruit-service ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/sobremesa/Documents/Develop/java/quarkus/poc/atomic-fruit-service/target/classes
[INFO] 
[INFO] --- quarkus-maven-plugin:2.11.3.Final:generate-code-tests (default) @ atomic-fruit-service ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ atomic-fruit-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/sobremesa/Documents/Develop/java/quarkus/poc/atomic-fruit-service/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ atomic-fruit-service ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /home/sobremesa/Documents/Develop/java/quarkus/poc/atomic-fruit-service/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:3.0.0-M7:test (default-test) @ atomic-fruit-service ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ atomic-fruit-service ---
[INFO] Building jar: /home/sobremesa/Documents/Develop/java/quarkus/poc/atomic-fruit-service/target/atomic-fruit-service-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- quarkus-maven-plugin:2.11.3.Final:build (default) @ atomic-fruit-service ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 1475ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.615 s
[INFO] Finished at: 2022-08-29T23:38:29+02:00

排查步骤

1. 检查runner Jar是否在子目录中

从Quarkus 2.x版本开始,默认打包结构会将runner Jar放在target/quarkus-app目录下,而非直接在target根目录。进入该目录查看是否存在quarkus-runner.jar,这是可执行的fat jar。

2. 验证Quarkus打包配置

打开项目的pom.xml,检查是否存在以下配置:

<properties>
    <quarkus.package.uber-jar>false</quarkus.package.uber-jar>
</properties>

如果quarkus.package.uber-jar被设为false,Quarkus不会生成可执行的runner Jar,仅生成普通Jar。将其改为true(默认值)后重新构建即可。

3. 确认插件绑定与版本

日志中已执行quarkus-maven-plugin:2.11.3.Final:build但未生成runner Jar,可能是插件绑定异常。尝试直接指定Quarkus打包目标:

./mvnw -DskipTests clean package quarkus:package

同时检查pom.xml中quarkus插件的配置,确保其绑定到package生命周期阶段:

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.platform.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                        <goal>generate-code</goal>
                        <goal>generate-code-tests</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

4. 区分Fat Jar与原生镜像

你配置的GraalVM和Native Image是用来生成原生可执行文件(非runner Jar)的,需要执行./mvnw -DskipTests clean package -Pnative才会触发原生镜像构建。runner Jar是基于JVM的可执行Jar,不需要GraalVM即可生成,因此GraalVM的配置不影响runner Jar的生成。

内容的提问来源于stack exchange,提问作者Ignacio Yuste Lopez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:01:13