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

咨询: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:17:49