1. 程式人生 > >Eclipse啟動項目正常,放到tomcat下就報錯的一例

Eclipse啟動項目正常,放到tomcat下就報錯的一例

detail maven 分享 html tle 相關 jdk windows ram

一個老的ssh的項目,進行二次開發(增加一些新功能)後,首先用Eclipse中集成的Tomcat啟動沒有任何問題,但是把啟動後的webapps下得目錄放到 windows的普通tomcat下啟動,居然啟動不起來

報錯如下:

技術分享圖片

技術分享圖片

各種折騰,首先發現,在win下的Tomcat目錄conf下得配置文件 server.xml 中的最後部分,host標簽中多了一個這個標簽

<Context path="" docBase="。。。。。。。。。。 />
技術分享圖片

 
裏面有個 eclipse的引用,直接把這行標簽刪掉,再次啟動,異常改變了。說明解決了一些問題。


然後異常是有兩處報:

Unsupported major.minor version 52.0解決辦法

根據上面鏈接,找到解決辦法為修改 eclipse中當前項目的三處jdk版本,但是修改過程中又報錯:

Project facet jst.web.jstl has not been defined.

解決方法,參見上文。

然後,終於,項目可以在 windows 的 對立 Tomcat中啟動了。


但是將其拷貝到Linux中運行,繼續報錯

查看日誌,報錯如下:
技術分享圖片

 

java.lang.NoClassDefFoundError: org/springframework/core/env/ConfigurableEnvironment

各種百度,均不能解決問題。

後來同事找到解決方法:

刪除項目中的一個 spring jar包:
技術分享圖片

問題解決。

原因:

項目是個老項目,沒有用maven關聯jar包,除了常規依賴外,其他jar包都是放在 WEB-INF的lib目錄下:

技術分享圖片

我們看到,實際上,項目中有兩個 spring-context jar包,可能導致了沖突。

下面這個jar是5.0版本的,而其它spring相關jar都是3.0版本的。

其實是因為同事增加了一個定時任務的功能,在定時任務功能的代碼中用到了一個註解:

技術分享圖片

就是這個註解,據說它是 spring-context 4.0以上jar包中才有的,因為報錯,所以同事引入了 spring-contxt 5.0 的jar包,但是5.0的jar包中可能需要依賴spring core等其他spring高版本的jar包,而我們項目中其他所有的spring jar包都是 3.0版本的,而且有兩個contxt jar,這些都有可能導致了

ConfigurableEnvironment 異常的發生。

所以,解決版本就是,刪掉 spring-contxt 5.0 的jar包,同時註釋掉報錯的代碼及其關聯代碼:

技術分享圖片



Eclipse啟動項目正常,放到tomcat下就報錯的一例