2014-02-19 56 views
2

問題:我需要結合使用我的maven項目中的許多工件:hbase,hadoop-client,akka,spray,netflix-curator,spark。所有這些工件都依賴於其他工件的不同版本:zookeper-client,protobuf,jetty等。我花了3天時間纔將所有排除的內容正確寫入到版本兼容性中。所以現在我已經有了非常一致的配置。我想創建一個框架來幫助我的同事工作在類似的堆棧上,使用我的工作成果,並且不用花3天的時間寫作排除。處理maven依賴中的許多衝突的解決方案。

我知道maven-enforcer-plugin,它不允許你使用不同版本的相同工件。它有幫助,但還不夠。

我很想聽聽您可能會建議的解決方案。這是我的願景:我只創建一個擁有依賴管理的父pom。在這個依賴關係管理中,我編寫了所有排除項並使工件兼容。然後有人可以使用這個pom作爲父項,並且只是編寫依賴關係。但有一個問題。我們從netflix-curator和hadoop中排除了zookeeper,但從hbase中排除。因此,當我們使用全部3個工件時,我們會收到來自hbase的zookeeper,但只使用netflix-curator和hadoop時,我們可能會丟失所需的工件。只有在運行時我們纔會收到「ClassNotFoundException」。這就是爲什麼我想爲這種情況編寫一個額外的插件。這個插件會檢查:如果你依賴某個工件,你應該依賴那些從工件中排除的工件。如果你失去了一些神器,你需要添加它或者配置一個異常。 您對這樣的解決方案有什麼看法?

回答

0

Interesting answer by Ron Weeler: http://blog.artifact-software.com/tech/?p=121 這描述了我們如何解決問題。

我們構建了一些庫,它們將相關庫組聚合到一個jar中,我們修復了所有版本衝突。然後開發人員只需要依靠少量的版本按我們想要的方式設置的罐子。

我們有 春 CXF 碧玉瓶報告 JSF Jetspeed的 的Tomcat和Java 休眠& MySQL的

等。總共約10個。這代表大約70Mb的代碼和配置。

我們有一個叫做「共享」的軟件,它可以從Apache和其他軟件中獲取所有的小工具,例如日誌,郵件,文檔製作,XML解析。

批准的集合被髮布具有相同的版本號,以便開發人員知道使用哪個集合。

這讓他們的生活變得更輕鬆。

我們還將這些庫作爲jar文件提供,以便項目jar只有自己的代碼,因此它們可以快速生成。一旦將庫加載到容器中,每次要刷新測試站點時都只有小文件需要處理。