2011-06-21 102 views
1

我們正在增加新的代碼到使用與螞蟻常春藤依賴管理開發的自定義生成系統現有的項目。指示Maven的使用常春藤的生成類路徑

我們新的團隊來Maven的及其功能,如測試執行的Cobertura報告等

我們的問題是:這是可行添加一個pom.xml匹配當前的項目結構,而是指示Maven從已經由Ivy填充的「lib」目錄加載它的類路徑?換句話說:我們想要使用Maven而不依賴它的管理。

其中一個真的很髒方法是從libdir生成一個大jar並配置pom.xml以包含這個......但是我們認爲應該有更簡潔的方法。

任何想法或建議嗎?

注意:我們沒有興趣從Ivy配置文件中生成依賴關係的pom.xml文件,我們只是希望Maven依賴Ivy生成的類路徑。不需要區分測試/運行時/編譯類路徑。

回答

1

這是我們最後的安裝來解決這個問題:

  • 對於每一個常春藤的傳統項目,使用常春藤:makepom和手動檢查,以找出我們需要發送到新項目的依賴關係(基於Maven)。這是每個項目的一次性過程。
  • 以某種方式修改遺留構建系統,每次構建項目時,標識的依賴項也會導出到mvn回購。由於de build machine擁有內部回購,我們只需使用mvn install
  • 在新的maven項目中,在pom.xml中聲明每個依賴項,並確保構建系統在遺留構建之後運行maven構建。

謝謝大家的幫忙!

0

一種可能性是使用system作用域在maven中定義依賴關係。這使得Maven可以使用ivy下載的jar文件進行依賴。

例如

<dependencies> 
    <dependency> 
     <groupId>group.id</groupId> 
     <artifactId>artifact</artifactId> 
     <version>a.b.c</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/lib/artifact-a.b.c.jar</systemPath> 
    </dependency> 
    ... 
    </dependencies> 
+0

謝謝......但這仍然迫使我們生成一個大的jar(不是很好......),或者逐個聲明所有的依賴關係(這是很多我們並不需要的重複工作) 。你知道我們是否可以將它指向libs目錄而不是一個.jar? – Sebastian

+0

@塞巴斯蒂安。那麼,如果你單獨使用maven,你會聲明每個依賴項:) – Raghuram

+0

是的:)但是我們的項目增加了現有的使用Ivy的項目。 – Sebastian

0

也許makepom task會有所幫助,它會從常青藤文件創建一個pom。從該頁面

例子:

<ivy:makepom ivyfile="${basedir}/path/to/ivy.xml" pomfile="${basedir}/path/to/module.pom" conf="default,runtime"> 
    <mapping conf="default" scope="compile"/> 
    <mapping conf="runtime" scope="runtime"/> 
    <dependency group="com.acme" artifact="acme-logging" version="1.0" optional="true"/> 
</ivy:makepom> 
+0

我們研究了這一點。唯一的問題是,我們需要編寫腳本來將生成的POM與已經存在的POM合併,每次Ivy配置發生變化時。在這種情況下,我們傾向於一個更簡單的選項:只需要創建一個大的.jar任務,並按照Raghuram的說明從Maven引用它。如果有人想出一個更好的主意,我會保持這個問題:) – Sebastian

+0

也許最好的解決方案是使用makepom一次,然後停止使用ivy。我覺得任何其他方法都會導致一些嚴重的頭痛以後:)。混合兩個依賴管理器似乎有風險。 – oers

+0

常春藤仍將用於其他項目。事實上,常春藤方面可能會發生一些變化,並且以後不會正確地轉向Maven方。但我認爲這不是一種風險,但作爲一種複雜性,我們需要用一些流程(手動/自動)來妥善解決。 – Sebastian