- 在使用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,項目正常啓動