如何强制Quarkus将javax.activation与jakarta库纳入uber jar
解决Quarkus同时纳入javax.activation与Jakarta依赖的问题
可以通过配置quarkus-maven-plugin结合pom依赖声明实现,核心是利用插件的强制包含功能覆盖Quarkus扩展的依赖排除规则,具体操作如下:
1. 显式声明所需依赖
在pom.xml中同时引入javax.activation和Jakarta Activation依赖,确保它们的scope为compile,避免被默认规则排除:
<dependencies> <!-- 遗留SDK依赖的javax.activation --> <dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> <version>1.2.0</version> <scope>compile</scope> </dependency> <!-- Quarkus 3.x兼容的Jakarta Activation依赖 --> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.1.2</version> <scope>compile</scope> </dependency> <!-- 你的遗留SDK依赖 --> <dependency> <groupId>your.group.id</groupId> <artifactId>legacy-sdk</artifactId> <version>x.y.z</version> </dependency> </dependencies>
2. 配置quarkus-maven-plugin强制包含
在插件配置中添加<forceInclude>节点,指定需要强制纳入uber jar的构件,直接覆盖Quarkus扩展的排除规则:
<build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <forceInclude> <dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> </dependency> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> </dependency> </forceInclude> </configuration> </plugin> </plugins> </build>
3. 关键注意事项
- 版本兼容性:Quarkus 3.x基于Jakarta EE 10,Jakarta Activation建议使用2.x版本,
javax.activation选用1.2.0这类稳定版本,避免类冲突。 - 验证结果:构建完成后,可通过
jar tf your-app-runner.jar命令查看uber jar内容,确认javax/activation和jakarta/activation路径下的类文件已被包含。 - 关于扩展排除规则:正如你提到的——
Quarkus扩展可能会定义应始终从构建中排除的构件
这时候<forceInclude>就是最直接的解决方案,它会忽略扩展的排除配置,强制将指定依赖加入最终构建产物。
内容的提问来源于stack exchange,提问作者Andriy Andrunevchyn
相关产品推荐
相关产品推荐

