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

如何扩展已发布的Quarkus Uber Jar以添加第三方依赖?

扩展已发布的Quarkus Uber Jar的可行方案

方案一:通过启动参数加载外部依赖(无需修改Uber Jar)

Quarkus支持通过系统参数指定额外的运行时类路径,你可以把需要添加的依赖Jar放在Uber Jar外部任意路径,启动时执行以下命令:

java -Dquarkus.class-path=/绝对路径/你的依赖.jar -jar some-aplication-1.0.0-runner.jar

只要依赖中的Bean符合Quarkus的CDI规范(比如标注了@ApplicationScoped、@Singleton等注解),运行时CDI就能正常识别并注入。

方案二:重新构建Uber Jar(最可靠的推荐方案)

Quarkus的Uber Jar是构建时优化产物,CDI Bean索引、字节码增强、依赖裁剪等操作都在构建阶段完成,直接修改Jar文件会破坏这些优化逻辑。最稳妥的方式是回到项目源码:

  1. 在pom.xml(Maven)或build.gradle(Gradle)中添加目标依赖。
  2. 重新执行构建命令生成新的Uber Jar:
    Maven:
    mvn clean package -Dquarkus.package.type=uber-jar
    
    Gradle:
    ./gradlew clean build -Dquarkus.package.type=uber-jar
    

这种方式能确保Quarkus完整处理新依赖的所有构建时逻辑,避免运行时出现各种兼容性问题。

方案三:手动修改Uber Jar并补充CDI索引(仅应急使用)

如果确实无法重新构建,只能修改已有的Uber Jar,可尝试以下步骤(风险较高,不推荐):

  1. 解压目标Uber Jar和要添加的依赖Jar到同一个临时目录。
  2. 将依赖Jar中的所有类文件、资源文件复制到解压后的Uber Jar目录中。
  3. 使用Quarkus的quarkus-indexer工具重新生成CDI Bean索引(需要先获取quarkus-indexer-runner.jar):
    java -jar quarkus-indexer-runner.jar --dir /临时目录路径 --output META-INF/jandex.idx
    
  4. 重新打包成Jar文件:
    jar cvfm some-aplication-1.0.0-runner.jar /临时目录/META-INF/MANIFEST.MF -C /临时目录 .
    

注意:手动修改可能破坏Quarkus构建时生成的优化元数据,导致运行时出现未知问题,仅建议在紧急场景下临时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:22:23