2012-07-18 59 views
0

我的應用程序具有兩個具有一些功能但不同版本號的罐子。兩個具有一些功能但具有不同版本號的罐子

-rwxr-xr-x 1 nobody nobody 87776 Jul 16 23:40 commons-io-1.3.2.jar 
-rwxr-xr-x 1 nobody nobody 109043 Jul 16 23:35 commons-io-1.4.jar 

一個jar 1.4.jar的方法deleteQuietly(),但版本較低1.3.1 jar沒有。

我的謎題是如果在調用方法時報告錯誤?

找不到符號 符號:方法deleteQuietly(java.io.File中)

我遇到這個錯誤,當我有這種情況:

回答

0

這是不完全清楚你的要求,但最好建議只是不這樣做。在編譯/編譯時僅使用一個版本的JAR,而在運行時只使用相同的版本(僅)。

如果您有兩個版本的JAR與API不是100%兼容(在兩個方向上),那麼行爲將取決於哪個JAR文件在類路徑中最先到達。如果沒有方法的版本首先出現,您將得到構建錯誤(如錯誤消息中的錯誤)或運行時錯誤。


我有點困惑,你認爲它可能有效。也許你認爲Java會加載這兩個版本的類,並使用某種魔法從不同版本中選擇方法。它不這樣工作。 Java將加載遇到的類的第一個版本:任何其他版本都將被默認忽略。

0

這是類加載器問題。從你的類路徑中移除commons-io-1.3.2.jar並重新部署。如果你不想刪除這個jar,使用maven來避免類加載問題。

+0

maven如何解決類加載問題? – BeeOnRope 2012-07-18 05:07:14

+0

Maven使用一個聲明依賴關係標籤的jar。它解決jar重複,就像嘉福的問題一樣。 – 2012-07-18 05:21:18

相關問題