2012-11-21 29 views
0

我有一個很大的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

+0

你可以JAR它,然後將它添加到你的本地Maven倉庫。之後,你可以把它放在你的pom.xml中 –

+0

我不想把它燒掉,只是爲了讓它成爲其他項目之一。我會對它進行很多修改,並且每次對它進行震動都會感到不舒服 – ufk

回答

0

我自己並沒有使用它,但我知道常春藤有task which can convert an ivy file to a maven pom.我會探索一個選項,我的CI環境運行該任務以在成功構建後生成一個POM,然後將我的Maven項目查看CI最新的jar和pom文物。您也可以跳過CI環境,並從本地文件系統獲取maven解析工件。

0

有趣... 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文件正在更新。

0

我不認爲你不會在沒有創建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結尾的版本號。