2011-08-19 30 views
3

我正在嘗試使用Eclipse創建可運行的JAR,但遇到問題。 Eclipse工作區包含兩個獨立的項目,這些項目依賴於相同的庫。我可以創建可運行的JAR,但問題是當我運行它時,我收到一個異常。具有重複依賴項的可運行JAR

我相信我收到了java.lang.NoSuchMethodError異常,因爲libraries are different versions。有沒有解決這個問題的通用解決方案?如果不是,你會推薦我做什麼?

+0

我明白你的意思是「依賴於同一個庫的不同版本」? – SJuan76

+0

是的,項目** A **取決於_lib-1.0_和項目** B **取決於_lib-2.0_。此外,項目** A **取決於項目** B **。 –

回答

1

如果主版本號的變化就意味着向後兼容性可能已經改變。

你可以嘗試使用最新版本,並希望他們只是添加方法和舊的工作方式,但即使NoSuchMethod異常沒有被拋出也沒有保證(也許有了新的API你應該調用不同的方法得到相同的結果)。

我會聯絡庫的供應商,並要求他們,如果兼容性被打破了。如果他們沒有回答或者被破壞,並且你有源代碼,唯一的可能就是重構其中一個庫(可能是1.0); V.G。把它放在新的數據包v1中。那麼你將不得不改變依賴它的項目。

如果上述作品,然後將溶液將是一個OSGi容器或設置項目A和項目B爲兩個不同的可執行文件和設置項目乙作爲回答項目甲消息的服務器。凌亂

+0

謝謝。正如一個側面說明,_lib-1.0_和_lib-2.0_不是實際的庫;他們只是例子。主要和次要版本號在我的情況下沒有意義,但對其他版本可能是這樣。 –

+0

如果區別是次要版本號,那麼只要使用最後一個數字,您應該是安全的(如果圖書館的提供者做了它應該做的事情)。如果與版本號不同,通常使用哪一個應該無關緊要(但最後一個建議)。 – SJuan76

+1

我結束了只是更新我的項目** A **使用_lib-2.0_庫。它確實需要我重構我的一些代碼,但幸運的是它並不是很多。幸運的是,我所做的改變很小,但如果他們要花更多時間,我可能會更多地關注OSGi。謝謝你的幫助! –

0

解決辦法是隻包括能夠同時滿足使用它的庫的庫中的一個版本。如果這是不可能的,你必須找到一種不同的方式來處理事情,以便消除衝突。選項包括:

  1. 從代碼中刪除一個或多個導致NoSuchMethodError的用法。
  2. 修改一個或多個庫的來源,以便它們可以愉快地共存。
  3. 使用OSGi容器,這將允許您在同一應用程序中擁有兩個版本的相同庫。
相關問題