- 由于Ivy可以輕松使用Maven風格的存儲庫(因此,您的Ivy客戶端可以繼續使用Ivy并進行一些微小的配置更改,因此將存儲庫遷移到Maven(例如Nexus),Maven客戶端也可以工作-推送請求流程也需要待更改)
- 嘗試使用JFrog Artifactory,因為據報道它可以為Ivy和Maven提供相同的資源 (免責聲明:我尚未嘗試實際使用它,并且我不知道開源版本是否包含此功能)
- 或繼續閱讀...
我的解決方案目標(可能很復雜)是:
- 它應該盡可能簡單和不言自明
- 它應該遵守DRY原則(不要重復自己)
- 除了Maven本身,它不應該具有其他依賴項
該解決方案如下所示(有關完整源,請查看code-repo ):
有兩個Maven配置文件:常春藤依賴項在已下載依賴項時激活,而常春藤解析則在尚未下載時激活。 這基于檢查最終要復制依賴項的目錄:
...
<id>ivy-dependencies</id>
<activation><activeByDefault>false</activeByDefault><file><exists>${basedir}/ivy-lib</exists></file>
</activation>
...
<id>ivy-resolve</id>
<activation><activeByDefault>false</activeByDefault><file><missing>${basedir}/ivy-lib</missing></file>
</activation>
...
不幸的是,這里很少重復,因為Maven似乎沒有在配置文件激活部分擴展用戶定義的屬性,例如$ {ivy.target.lib.dir}。 概要文件還具有其他作用:避免在實際解決依賴關系之前對其進行考慮。
首次運行構建時,它將創建目標目錄,并在其中寫入Ivy構建所需的文件(ivy.xml,ivysettings.xml和build.xml –在此示例中,我使用了Red5相應文件中的某些部分repo ),運行構建并嘗試自行清理。 它還會創建一個dependencies.txt文件,其中包含需要添加到依賴項列表中的文本塊。 最后,它失敗(失敗),指示用戶再次運行該命令。
在第二(第三,第四等)運行時,依賴項已經存在,因此解決過程將不會重復運行。 選擇這種方法而不是在每次構建時都運行解析,因為-盡管解析過程很快,但在一些更復雜的情況下可能會花費數十秒,并且我不想放慢構建速度。
而且,Ivy,Apache BSF框架等是從Maven中央存儲庫中獲取的,因此無需預先安裝它們即可成功完成構建。
關于選擇$ {ivy.target.lib.dir}的幾句話:如果在Maven樹中選擇它(如示例中選擇的那樣),您將收到來自Maven的警告,將來可能不再支持。 另外,請確保將目錄添加到VCS的忽略機制(.gitignore,.hgignore,.cvsignore,svn:ignore等),以避免將庫意外提交給VCS。
如果需要向項目添加新的(Ivy)依賴項,則步驟如下:
- 刪除當前的$ {ivy.target.lib.dir}目錄
- 更新pom.xml中寫出ivy.xml文件的部分以包含新的依賴項
- 運行構建并觀察新的依賴關系已解決
- 更新常春藤依賴項配置文件的依賴項部分以包括新的依賴項(可能是從dependencies.txt復制)
這種方法的一個缺點是基于Maven的系統的高級功能無法使用這些依賴項(例如,依賴項analisys /圖形插件,自動下載源代碼/ javadocs等)。 可能的解決方法(通常是個好主意)是對最小子集使用此方法-只是在Maven Central中找不到的jar。 所有其余部分(即使它們實際上實際上是從Ivy獲取的代碼的依賴關系)也應聲明為常規依賴關系,以從Maven存儲庫獲取。
最后,我想說的是,這一努力再次向我展示了Maven和Ivy / Ant可以多么靈活,并闡明了CDATA內部的許多極端情況(如我們如何逃脫] –我們將其分成兩部分)。 而且它也可以進行進一步的調整(例如:將一個干凈的目標添加到ivy-resolve配置文件中,因此您可以使用mvn clean -P ivy-resolve刪除目錄,或者將所有下載的jar重新添加到一個jar中例如像這樣 ,這樣就避免了每次更改Ivy依賴項列表時都需要修改pom文件-這樣,再次簽名的JAR也無法重新添加,因此也不是通用解決方案。
參考: Transylvania Java用戶組的 JCG合作伙伴 將Maven與Ivy集成在一起 。
相關文章 :
- 任何軟件開發公司應存在的服務,實踐和工具,第1部分
- 在領域驅動的設計,貧乏的領域模型,代碼生成,依賴項注入等方面……
- OSGi將Maven與Equinox結合使用
- Java模塊化方法–模塊,模塊,模塊
- 使用Spring AspectJ和Maven進行面向方面的編程
- GWT EJB3 Maven JBoss 5.1集成教程
翻譯自: https://www.javacodegeeks.com/2011/10/integrating-maven-with-ivy.html