2009-10-25 77 views
8

我目前工作的同時兩個項目:Maven的整合及非Maven項目

  • 我的主要項目(使用Maven構建)
  • 一個開源項目,其中我的主要項目依賴的秒殺(不是用maven構建的)

我該如何設置maven以最少的摩擦力將OSS項目用作依賴項,因爲我經常開發這兩個項目?

回答

10

我能想到的幾個解決方案:

  1. Mavenize現有的OSS項目。這當然是「理想」的選擇,但往往不可行(即使您將現有的並行系統引入新的構建系統)。該項目可能存在與Maven的標準佈局不同的現有項目結構。更改現有佈局和構建腳本可能不是開發人員所期望的,使Maven構建適合使用非標準佈局可能會很痛苦。在這兩種情況下,你都搞砸了。

  2. 用Maven包裝現有的Ant構建。如果您想要在項目的生命週期中包含OSS項目的構建並將它們都構建在一個步驟中,這可以很好。您可以查看this answer on SO以瞭解如何執行此操作的詳細信息。

  3. 使用Apache IvyMaven Ant Task在現有的構建生產並在本地資源庫安裝Maven構件。將此工件用作Maven項目中的常規依賴項(除非您必須手動聲明其傳遞依賴項)。如果單獨構建這兩個項目不是問題,這也許是更快更少干擾的方法。

它看起來像你選擇選項3.我認爲這是一個快速獲勝的好選擇。

+0

+1擴大我的知識:) – cetnar 2009-10-25 18:14:06

0

我想你可能需要咬緊牙關,爲你的OSS項目樹建立一個POM。這是一個痛苦的部分(因爲您需要根據OSS應用程序類型(即Web等)尋找爲各種插件指定資源路徑的細節)。好消息是這是一次性努力。

一旦完成,您的主項目可以引用(包裝的)OSS項目作爲依賴項。這裏有一個(標準maven)多項目結構。

1

我使用的解決方案是maven-ant任務(http://maven.apache.org/ant-tasks/)。

我將一個安裝任務添加到build.xml文件中,該文件將編譯後的.jar文件安裝到本地存儲庫中。

雖然在項目中增加一個完整的pom將明確地成爲最好的方法,但這是一個主要的工作,並且會在項目中造成maven(其他用戶不希望使用它)。

0

如果OSS項目具有依賴項 - 創建一個具有這些依賴項的POM(您的項目將使用它們作爲傳遞依賴項),並將該項目和POM安裝在本地存儲庫中。如果OSS項目沒有任何其他依賴更簡單 - POM在安裝過程中自動生成。

對於這兩種情況使用maven-install-plugin

mvn install:install-file -Dfile=your-artifact-1.0.jar \ 
        [-DpomFile=your-pom.xml] \ 
        [-Dsources=src.jar] \ 
        [-Djavadoc=apidocs.jar] \ 
        [-DgroupId=org.some.group] \ 
        [-DartifactId=your-artifact] \ 
        [-Dversion=1.0] \ 
        [-Dpackaging=jar] \ 
        [-Dclassifier=sources] \ 
        [-DgeneratePom=true] \ 
        [-DcreateChecksum=true]