2012-10-10 126 views
1

我有一個用於構建J2EE應用程序和創建jar文件的ant腳本。問題如下:應用程序運行需要兩個jar文件。如何在部署時在獨立包中包含jar文件

commons-math-2.0.jar 
commons-math-1.0.jar 

但是,我想只使用2.0應用程序內的特定軟件包,其餘應用程序使用1.0。我如何構建應用程序以僅使用包含com.naurus.eventhandler.risk等包名稱的2.0版本?再次,我使用的是Ant腳本,但是如果有更簡單的方法來做這種事情,我願意嘗試。謝謝!

回答

0

這會造成問題,因爲在部署J2EE應用程序時,兩個JAR文件最終都會在相同的類路徑中。您可以通過OSGI bundles來實現您試圖嘗試的操作,它允許每個軟件包具有不同的依賴關係。但是,這對應用程序來說是一個相對較大的重構。

IMO,這將是最好要麼:

一個)重複從2.0需要(如果數量小和許可證允許的話,例如,包個別類)的功能。

B)花點時間整個應用程序升級到2.0

+0

感謝您的回答。但我有個問題。看來commons-math是一個apache jar文件。我們能否將它們合併成一個?由於1.0中有一些函數在2.0中不再存在,即不推薦使用。這是問題的真正原因......我不確定是否將這些罐子分開並將它們合併爲一個將會是「合法」的呢? – dido

+0

如果它們已被棄用,但仍然存在,則可以使用它們。他們可能會在未來的版本中消失。我會建議升級到2.0。 – Saish

2

如果兩個罐子包含不同的類/包應該沒有問題,有所有這些應用程序中的類路徑。因此,不要使用另一個包中的一個jar包中的類。

但我想這兩個罐子大部分包含相同的類/方法?使用不同版本的相同類有很多方法:

  • 使用不同的ClassLoader實例。我不會認爲它是「容易的」,遠非如此,這意味着打開一堆討厭的錯誤。 (可以使用類似OSGi的工具來幫助)
  • 將應用程序拆分爲兩個進程,這些進程在相同的Ant目標中啓動,並使用任何平均值(CORBA,RMI,REST等)進行通信。

雖然我不會建議使用這些方法。 使所有軟件包使用相同的版本可能會更簡單。這樣做有沒有特別的困難?

相關問題