2013-10-02 37 views
0

我需要你的幫助。我遇到與Tomcat classloader有關的異常問題。我有一個WAR,在WAR內部有一個具有本地方法的第三方JAR。 WAR首次成功部署在開發服務器中,並且已經運行了大約3個月。上個星期,我做了一些代碼重構並想部署更新的WAR,所以我刪除了舊的實例並部署了WAR。但現在重新部署後,我總是面臨NoClassDefFoundError。我重新部署了WAR幾次,結果是一樣的,NoClassDefFoundError。Tomcat類加載器不工作

奇怪的是,當我在我的筆記本電腦中部署更新的WAR也使用Tomcat時,它工作正常。我的同事也嘗試使用Tomcat部署在他的筆記本電腦中,它工作正常。

我已刪除工作目錄內的文件,但仍出現NoClassDefFoundError。我關閉了Tomcat,刪除了webapp文件夾中的實例,再次在webapp文件夾中複製更新的WAR,再次打開Tomcat,但仍顯示錯誤。

開發服務器中的Tomcat有什麼問題?

+0

檢查Tomcats的版本。 – ppeterka

+1

嘗試從tomcat/work/Catalina /刪除應用程序文件夾,然後重新啓動服務器 –

+0

可以顯示錯誤嗎?看起來你刪除了一個依賴的jar –

回答

1

您只能在JVM的生命週期中註冊一次本機庫。我懷疑當你更新WAR時,它試圖再次註冊本地庫,失敗並導致NoClassDefFoundError。 Tomcat服務器的重新啓動修復與此理論一致。

如果您發佈包含本機庫的WAR,那麼最安全的方法是每次需要更新應用程序時重新啓動Tomcat。

+0

我確實多次重啓了開發服務器,仍然發生錯誤。我也同意這種解決方案,因爲它可以在筆記本電腦上的Tomcat上運行,但它在開發服務器中無法使用。任何其他想法?謝謝你的方式。 –