2010-04-12 117 views
6

假設我有一個依賴於某個庫的開源項目,必須對其進行修補以修復一些問題。我怎麼做?我的想法是:maven項目的佈局,具有修補的依賴關係

  1. 將該庫源設置爲模塊,將它們保存在我的vcs中。優點:簡單。缺點:我的回購中有些第三方來源可能會減慢構建過程,很難找到修補位置(雖然可以在自述文件中修復)
  2. 有一個模塊,就像1一樣,但只保留修補過的源文件,編譯它們在類路徑中使用orignal庫jar,並以某種方式替換build中的庫jar中的* .class文件。優點:構建速度更快,易於查找修補位置。缺點:很難配置,那個jar hackery是不明顯的(庫中的庫jar和我的項目組件中會有所不同)
  3. 在主/資源中保存修補* .class文件,並在包裝​​中替換,如2)。優點:幾乎沒有。缺點:vcs中的二進制文件很難重新編譯修補類,因爲修補程序編譯不是自動的。

一個不錯的解決方案是創建一個獨立的項目與補丁庫源,並部署在具有-patched限定符的本地/企業存儲庫。但是這並不適合開源項目,任何人都可以輕鬆構建出源代碼。或者我應該說「還有,在你構建我的項目之前,請檢查一下這些東西並運行mvn install」。

回答

6

一個不錯的解決方案是創建一個獨立的項目與補丁庫源,並將其部署在具有-patched限定符的本地/企業存儲庫。但是這並不適合開源項目,任何人都可以輕鬆構建出源代碼。或者我應該說「還有,在你構建我的項目之前,請檢查一下這些東西並運行mvn install」。

這是我爲企業和開源項目所做的(實際上是我所做的)。獲取源代碼,將它們置於獨立項目的版本控制之下,修補它們,重新構建修補過的庫(並在版本中包含此信息,如XYZ修補程序),將其部署到存儲庫(您可以使用SVN進行此操作, Google Code ),在POM中聲明存儲庫並更新依賴項以指向修補的版本。

通過這種方法,您可以對用戶說:檢查我的代碼並運行mvn install,他們只會得到修補版本而不需要任何額外的操作。這是恕我直言的最清潔的方式(不容易出錯,沒有類路徑順序混亂,不增加編譯時間等)。

很多人正在將他們的代碼部署到他們的託管Subversion版本庫(如何在this post)。

3

一個不錯的解決方案是創建一個獨立的項目與補丁庫源,並將其部署在具有-patched限定符的本地/企業存儲庫。但是這並不適合開源項目,任何人都可以輕鬆構建出源代碼。或者我應該說「還有,在你構建我的項目之前,請檢查一下這些東西並運行mvn install」。

我同意這和帕斯卡的答案。一些補充說明:

  • 你可以在原來的神器使用dependency:unpack,然後結合起來,與您編譯的類,如果你不想重建整個依賴項目
  • 在這兩種情況下,你的pom.xml需要正確地表示該庫的
  • 你仍然可以整合這是你的項目構建的一部分,以避免依賴關係「部署到倉庫」一步
  • 確保你的榮譽項目許可證的做這一切時的約束!
+0

+1 Nice additional notes – 2010-04-12 21:43:00

相關問題