我有一個很大的maven項目,有很多也是基於maven的子項目。在maven中使用ivy java項目?
我開始使用Red5,而red5創建了一個基於ivy的項目。我需要將該項目添加到依賴項。
項目主目錄的列表文件:
build.properties build.xml ivy.xml ivysettings.xml lib readme.txt src www
我怎麼可以添加這個項目作爲Maven項目的一個依賴?
使用Java和Maven 3.0.4
謝謝! Kfir
我有一個很大的maven項目,有很多也是基於maven的子項目。在maven中使用ivy java項目?
我開始使用Red5,而red5創建了一個基於ivy的項目。我需要將該項目添加到依賴項。
項目主目錄的列表文件:
build.properties build.xml ivy.xml ivysettings.xml lib readme.txt src www
我怎麼可以添加這個項目作爲Maven項目的一個依賴?
使用Java和Maven 3.0.4
謝謝! Kfir
我自己並沒有使用它,但我知道常春藤有task which can convert an ivy file to a maven pom.我會探索一個選項,我的CI環境運行該任務以在成功構建後生成一個POM,然後將我的Maven項目查看CI最新的jar和pom文物。您也可以跳過CI環境,並從本地文件系統獲取maven解析工件。
有趣... A lib
在常春藤項目中的目錄。
您可以修改build.xml以創建另一個調用<ivy:makepom/>
目標的目標。只要確保首先調用<ivy:resolve>
。這將創建您需要的pom.xml
文件的一小部分。
至於其餘。這個技術術語是什麼?噢,你被搞砸了。
問題是Ant和Maven有兩個完全不同的構建哲學。在Ant中,您編寫了一個build.xml
腳本,描述了您想要構建的內容以及如何構建它。在Maven中,您通過pom.xml
文件描述您的項目,Maven會爲您完成所有構建過程。
這不是一個問題,不管Ant或Maven是否是世界上所有好的力量,另一個只是蘋果Fanboys的推動者。這是手動將預先存在的項目轉換爲Maven的情況。
你必須通過你的build.xml
並找出它正在做的一切。然後,您需要將其轉換爲Maven pom.xml
文件。無法自動執行此操作。更糟糕的是,Red5並沒有像Maven項目那樣安裝,所以你必須移動所有的文件,或者進入古老的pom.xml
配置地獄試圖重寫Maven假定構建假設發生的方式。這可能需要幾天甚至幾周的時間才能正確。最後,如果你想更新的話,你最終會得到一個你無法控制的項目,這將不得不從頭開始重新進行。
相信我,我之前做過這樣的工作,系統架構師認爲Maven比Ant好,我們所有的項目都必須從Ant轉換爲Maven。而且,誰被這個任務困住了?不是那些忙於其他任務的開發人員,而是我的配置管理員。
最後,如果你想要更新,你將不得不控制一個項目,並且必須從零開始重新進行。
有一個替代方法:忽略它。
如果Red5是常春藤項目,真的很重要嗎?無論如何,你需要從Red5項目中獲得什麼?你需要那個red5.jar
或建立的分佈。
如果你需要分配,讓它保持爲常春藤項目。只需將ivysettings.xml
設置爲指向您的Maven存儲庫,並讓它知道它是Maven 2格式。常春藤不會有任何問題。那麼,如果是常春藤呢?
如果您只需要在其他Maven項目中使用red5.jar
文件,則可以簡單地使用<ivy:makepom/>
任務爲您生成pom.xml
文件。然後使用mvn deploy:deploy-file
到罐子部署到您的Maven倉庫:
$ mvn deploy:deploy-file -Dfile=red5.jar \
-DpomFile=pom.xml \
-DrepositoryId=$repoId \
-Durl=$url
現在,你red5.jar
是在你的Maven倉庫作爲一個完全傳遞下載罐子。如果你真的想真正想要,你可以將生成的pom.xml文件嵌入到jar中,所以它就像是Maven jars一樣是自引用。這將需要大約30分鐘的時間來攻擊當前的build.xml文件。 (或者,如果你的jar沒有嵌入pom.xml,你需要一個單獨的Ant文件,它可以構建你需要的pom.xml
,甚至可以將它部署到你的Maven倉庫中。這樣,如果項目得到更新,你不必擔心build.xml
文件正在更新。
我不認爲你不會在沒有創建JAR的情況下離開。Maven的整個依賴關係哲學是圍繞庫中的JAR文件構建的 - 當一個maven項目依賴於另一個工作方式時,依賴項目會構建其JAR並將其放入本地存儲庫,然後主項目將依賴於該項目。
也就是說,您可以相當容易地自動化這使用的組合和Maven Ant Tasks。這個想法是讓Ivy項目構建它的JAR,並將其作爲每個構建的一部分推送到本地Maven存儲庫,以便Maven項目可以立即使用它。
<jar destfile="project.jar">
<fileset dir="classes" />
</jar>
<ivy:makepom ivyfile="ivy.xml" pomfile="project.pom" conf="default,runtime">
<mapping conf="default" scope="compile"/>
<mapping conf="runtime" scope="runtime"/>
</ivy:makepom>
<artifact:pom id="project.pom" file="project.pom" />
<artifact:install file="project.jar" pomRefId="project.pom" />
確保您的常青藤項目都有與-SNAPSHOT
在其ivy.xml
結尾的版本號。
你可以JAR它,然後將它添加到你的本地Maven倉庫。之後,你可以把它放在你的pom.xml中 –
我不想把它燒掉,只是爲了讓它成爲其他項目之一。我會對它進行很多修改,並且每次對它進行震動都會感到不舒服 – ufk