2012-11-20 84 views
0

是否有任何工具和/或最佳實踐可幫助管理跨許多相關項目的大量內部庫版本。請允許我詳細說明,Maven內部庫pom版本管理

假設您有產品A,B,C。 這些產品依賴於庫X,Y,Z,並且這些產品也存在依賴關係。

在這個世界上,我們喜歡保留所有版本的最新發佈版本的所有依賴關係(沒有快照依賴關係,除了工作副本)。這使我們可以隨時發佈產品,並強制所有項目在CI(哈德遜)中運行。

問題在於保持pom.xml的全部是最新的。目前,我們使用一個定製的Maven插件,作爲每個版本的一部分,在我們的SCM中搜索pom.xml,這取決於正在發佈的項目並進行更新。這與versions-maven-plugin類似,不同之處在於您不需要每個項目的工作副本來執行此操作。

必須有更好的方法。其他團隊在許多項目中如何處理許多共享庫?組織這個的最好方法是什麼?在某些情況下,多模塊工作,但我們的大多數庫是相當獨立的,並被太多的其他項目用於(a)決定它將記錄的多模塊和(b)適用於此的多層模塊。

回答

1

管理Maven中的依賴關係可以很好地與dependencyManagement配合使用 - 我認爲你對它很熟悉。您可以將此依賴管理外包給專用的POM:所謂的BOM POM(請參閱http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)。

在您的情況下,您的產品A,B和C可能共享此BOM POM。由於這個事實,您應該定義一個Maven項目,其中包含此BOM POM以及第三方軟件X,Y和Z的所有依賴項管理。該項目可以發佈,您可以通過導入範圍來添加對BOM POM的依賴關係。

您的BOM POM:

<project> 
    <groupId>com.acme</groupId> 
    <artifactId>my-thirdparty-bom-pom</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    ... 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>...</groupId> 
     <artifactId>X</artifactId> 
     <version>...</version> 
     </dependency> 
     <dependency> 
     <groupId>...</groupId> 
     <artifactId>Y</artifactId> 
     <version>...</version> 
     </dependency> 
     <dependency> 
     <groupId>...</groupId> 
     <artifactId>Z</artifactId> 
     <version>...</version> 
     </dependency> 
    </dependencies> 
    <dependencyManagement> 
    ... 
</project> 

導入示例項目A

<project> 
    ... 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>com.acme</groupId> 
     <artifactId>my-thirdparty-bom-pom</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <scope>import</scope> 
     <dependency>   
    </dependencies> 
    <dependencyManagement> 

    <dependencies> 
    <dependency> 
     <groupId>...</groupId> 
     <artifactId>Y</artifactId> 
     <!-- the version is managed by the thirdparty bom imported above --> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
0

最接近的事就是用Dependency Version Ranges,然後在輪廓覆蓋您的POM的repositories changing snapshots to false,確保包括您的個人資料在釋放期間用「-P」。

<dependency> 
    <groupId>a</groupId> 
    <artifactId>a</artifactId> 
    <version>[3.8,4.0)</version> 
</dependency> 

...

<profiles> 
<profile> 
    <id>your-release</id> 
    <repositories> 
    <repository> 
    ... 
    <snapshots> 
     <enabled>false</enabled> 
    </snapshots> 
    </repository> 
    </repositories> 
</profile> 
<profiles> 

另一種模式是,讓你創建一個POM的"bom":聲明依賴項的列表,使管理更輕鬆(少改變)(包裝POM)。