2010-08-19 95 views
1

我們有一個使用大量FOSS/COTS軟件的Java產品。我們的一些「外部」使用相同的罐子產品,但是是不同的版本。例如,Ant 1.6.5和Ant 1.7.0;或多個版本的xerces。我擔心的是,我們的應用程序的行爲可能會發生變化或變得更糟,如果我們改變了類路徑放在一起的順序,那麼史詩般的失敗。我們使用vbs腳本爲每個產品的類路徑設置環境變量,然後使用引用這些環境變量的Ant xml文件。你如何處理多個jar版本的大量FOSS/COTS?

所以,幾個問題:

  1. 如何管理同一個jar的多個版本,使用這麼多不同的外部是什麼時候?當然,我不能只找到所有獨特的罐子,並把它們放在一個大班級路線上 - 或者我可以嗎?
  2. 是否有更智能的方法將我們的構建依賴項(和類路徑)放在一起?

一個積極的一步是,我打算使用通配符來抓取所有的罐子。但這真的只是我最關心的進口訂單問題。

注意:不要拍攝信使。這個系統在幾年前就已經實現,早在我到達這裏之前。我只是清理人員。

回答

5

Maven。需要一段時間才能弄清楚並設置好它,但一旦它正常工作,它就很神奇。

http://maven.apache.org/download.html

+0

聽起來像Maven是最好的解決方案。如果我們沒有達到這個產品的壽命,我會馬上進入。我不知道在這一點上我是否可以證明一個完整的開關。但是,也許我可以深入研究它,使其成爲下一次的簡歷生成器;)謝謝! – Dave 2010-08-19 23:49:29

+0

開始將新東西融入到maven中,並且在5年後,當您的生命週期結束產品仍在使用時,您將能夠很快地將其轉換:) – bwawok 2010-08-20 03:35:10

1

您可以添加Ivy到Ant構建中明確版本的依賴。當談到構建類路徑時,我建議你努力尋找一種你沒有同一個庫的多個版本的情況。我們有一些非常煩人的行爲,IDE將使用傳遞依賴來構建類路徑,但是我們按照字母順序構建了我們的unix類路徑,導致Saxon/Xalan JavaMail/Genronimo-JavaMail之一被加載,具體取決於您運行代碼的位置。

正如在其他答覆中提到,如果你有時間重新工作,你的編譯系統,你應該看看行家。

我很喜歡這個talk由約翰·智能上維護您的構建環境

2

如果你把所有的罐子在同一個類加載器,那麼你可以使用Maven來確定的依賴集。這將選擇該組依賴項所需的每個庫的最新版本。 (例如,Ant 1.7.0將被選中,而不是1.6.5)。這種方案運行良好 - 除非庫不與早期版本向後兼容。因此,在更改依賴關係時測試應用程序的相關功能/功能是個好主意。

的替代,這是唯一可行的,如果文庫可以分成接口和實現,是加載在一個共同的類加載器的接口,並在自定義類裝載器的實現+依賴性。通過給它自己的類加載器來隔離每個依賴。這基本上是OSGi所做的。

+0

您可以將我指向TFM,以解釋如何使用Maven來確定依賴關係集?對不起,我只是一個完整的Maven noob。 – Dave 2010-08-19 16:57:54

+0

maven自動執行此操作,它被稱爲依賴性解析。有各種各樣的插件可以將你的代碼與依賴包打包在一起,比如war插件。您可以使用依賴項插件顯式複製依賴項。 http://maven.apache.org/plugins/maven-dependency-plugin/ – mdma 2010-08-19 19:32:58

+0

非常棒的信息。謝謝一堆! – Dave 2010-08-19 23:44:03

0

這是OSGi設計要解決的問題:在應用程序中擁有多個獨立版本的相同罐子。

+0

這一句話可能是完全正確的。儘管如此,它並不能幫助初學者在那個領域得出一個想法,從哪個方向開始。我的意思是,你不希望原始的海報開始閱讀所有的OSGI規格,對吧?所以也許你有更詳細的指針? – Bananeweizen 2011-12-01 14:52:40

1

我不確定使用Maven或Ivy的建議能否解決真正的問題。他們可能會清理依賴聲明,但他們不會做任何有關衝突的事情。如果您需要發貨兩個不同版本的相同庫(因爲如果庫不向後兼容,則使用最新版本將不一定),您可以使用jarjar重新打包具有不同軟件包名稱的庫,以便兩個版本都可以必要時加載。

+0

是否會重新打包jar這樣的破解許可協議?我不想讓我們後面的模糊。也必須向法律部門解釋。 – Dave 2010-08-19 18:39:43

+0

@Dopyii我不知道商業JAR,但你不應該修改Apache/BSD許可的開源的任何問題。 – 2010-08-19 20:55:21

+0

感謝您的信息丹! – Dave 2010-08-19 23:44:24