- 在使用SpringJMS时,引入相应的jms依赖后,编译时正常,通过maven插件在tomcat运行时却报这个错。
- 网上不外乎三种解决方案,我都做了尝试
方案1:添加j2ee依赖
<dependency>
<groupId>javax</groupId>
<artifactId>j2ee</artifactId>
<version>1.4</version>
</dependency>
首先,这个包在maven的官方库里是没有的,废了很大的劲,才下了个,并导入到了本地的maven库,添加到项目里
然后又报这个错:
经过分析,原因是j2ee-1.4.jar下的包(javax/servlet/ServletContext)和web容器(tomcat)的包重复了,所以类加载失败。前者这个jar包jms需要调用,所以,也不可能不引人或者在引入的地方加<scope> provided </scope>
。后者是容器指定加载的,我不打算侵入容器内部,怕造成其他问题。所以结果就是,这条路暂时走不通了。
方案2:更换Web容器
我反正更换了很多版本,都不行,又折腾了很久
方案3:更改JDK版本
网上的意思说是JDK版本不对,也就是说,正确的JDK版本本来就应该包含这个缺少的包,就不会报错。我觉得也有道理,本来这种底层的东西,就应该是环境自带的,于是乎,我又试了很多不同的JDK版本。结果都报同样的错。极度无语
折腾了许久,事情好像走上了死胡同。最后从头开始,反复的思考问题产生的原因,突然发现还有个方案:
最终解决方案:改官方的jar包
以前有种思维定式,总认为官方的jar包不能改,会破坏稳定性,但既然我能明确影响的范围,为什么就不能改?
于是,到j2ee-1.4.jar下,将如下路径的包删除:
更新maven,项目正常启动