引入camel-jms-starter:3.20.2出现两个Geronimo JMS规范版本,是Bug还是设计如此?
关于camel-jms-starter引入多版本Geronimo JMS规范的问题解答
这是设计考量而非错误
Camel 3.x版本的camel-jms模块依赖geronimo-jms_2.0_spec是为了支持JMS 2.0的新特性(比如共享消费者、延迟消息等);而camel-jms-starter额外引入geronimo-jms_1.1_spec,是为了适配Spring Boot生态中仍在使用的JMS 1.1客户端组件(比如ActiveMQ 5.x系列),属于兼容老环境的设计策略,并非bug。
可以通过排除不需要的版本解决
完全可以根据你实际使用的JMS服务端/客户端,排除其中一个版本:
- 若使用支持JMS 2.0的组件(如ActiveMQ Artemis、IBM MQ 9+等):排除JMS 1.1规范包
- 若使用仅支持JMS 1.1的老组件:排除JMS 2.0的alpha版本
Maven排除示例
排除JMS 1.1规范包
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jms-starter</artifactId> <version>3.20.2</version> <exclusions> <exclusion> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> </exclusion> </exclusions> </dependency>
排除JMS 2.0规范包
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jms-starter</artifactId> <version>3.20.2</version> <exclusions> <exclusion> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_2.0_spec</artifactId> </exclusion> </exclusions> </dependency>
注意事项
排除后需确保你的JMS客户端与保留的规范版本完全兼容,避免出现类找不到、方法不匹配等运行时错误。
内容的提问来源于stack exchange,提问作者Søren
相关产品推荐
相关产品推荐

