咨询:Java 9 JPMS是否有对应的JMS模块及获取途径
Java 9+ JPMS下JMS模块的解决方案
嘿,刚好跟你碰到过一样的困惑,我来梳理下可行的解决路径:
1. 官方首选:切换到Jakarta Messaging模块
首先得明确,原来的Java EE体系下的javax.jms已经随着Java EE整体迁移到了Jakarta EE,现在官方支持的JPMS兼容版本是Jakarta Messaging,模块名为jakarta.jms。
这个版本的jar包自带Automatic-Module-Name清单属性,完美适配JPMS。在Maven里直接引入就行:
<dependency> <groupId>jakarta.jms</groupId> <artifactId>jakarta.jms-api</artifactId> <version>3.1.0</version> <!-- 可以用最新的稳定版 --> </dependency>
唯一需要注意的是,它的包名已经从javax.jms改成了jakarta.jms,所以你代码里的导入语句需要对应调整。如果代码量比较大,也可以用Jakarta提供的迁移工具来批量转换,省不少事。
2. 临时兼容:给旧的javax.jms-api添加自动模块名
如果暂时不想动代码里的javax.jms导入,也可以手动给javax.jms:javax.jms-api:2.0.1补上自动模块名:
- 直接解压jar包,修改
META-INF/MANIFEST.MF,添加一行Automatic-Module-Name: javax.jms,再重新打包 - 要是你自己用Maven构建这个依赖,可以配置
maven-jar-plugin在打包时自动生成这个属性
不过这只是权宜之计,毕竟官方已经停止维护javax.*命名空间的API了,长期来看还是建议转到Jakarta版本更稳妥。
3. 第三方JPMS兼容的javax.jms模块?
目前主流开源社区里没有官方维护的带Automatic-Module-Name的javax.jms模块,毕竟整个Java EE生态都已经转向Jakarta了。非官方的第三方打包版本风险太高,不建议依赖,说不定哪天就没人维护了。
总的来说,最靠谱的方案就是迁移到Jakarta Messaging的JPMS模块,这是官方支持的长期路线。
内容的提问来源于stack exchange,提问作者klr8
相关产品推荐
相关产品推荐

