2012-01-26 79 views
3

我有一個相對較大的具有模塊依賴關係鏈的maven項目,我試圖通過Jenkins自動完成構建過程,該過程使用版本號上傳模塊jar文件。在這樣做的時候,如果沒有爲命令行maven調用指定參數,我仍然希望模塊具有默認的版本號(默認爲0.0.0.dev)。具有相同版本號的Maven依賴關係鏈

我第一次嘗試<version>0.0.0.dev</version>確定我可以用maven命令行覆蓋此值。事實證明,情況並非如此:http://jira.codehaus.org/browse/MINSTALL-30。有一條評論引導我進行下一次嘗試:<version>${build.number}</version>,我會將內部版本號傳遞給命令行。顯然,因爲該屬性沒有設置在其他地方,如果沒有構建編號提供,我會得到諸如module.name - $ {build.number} .jar之類的jar。簡單修復:如評論建議,添加<properties><build.number>0.0.0.dev</build.number></properties>

當我嘗試將該版本傳播到模塊依賴關係時,會導致傳遞性問題。假設我有moduleA取決於moduleB取決於moduleC,我要求每個有相同的版本號。依賴的例子:在moduleA的POM文件:

<dependency> 
    <groupId>groupID</groupId> 
    <artifactId>moduleB</artifactId> 
    <version>${version}</version> 
</dependency> 

運行mvn compile –Dbuild.number=9.9.9.9上moduleA:它會尋找moduleB-9.9.9.9.jar,但它會尋找moduleC-0.0.0.dev.jar。這是因爲build.number屬性不是可傳遞的(不像實際的版本號)。

我的問題:我如何獲得所需的行爲?由於沒有在命令行上傳遞額外的參數,因此使用默認版本號構建一個jar,但允許以該模塊針對具有相同版本的其他模塊的方式覆蓋該默認值。

+0

模塊和依賴在Maven中有非常明確的含義。命令行***上的屬性將傳播***到當前反應堆中正在構建的所有模塊。 'moduleB'是'ModuleA'的依賴項和模塊還是隻是依賴項? – Dev

回答

2

只有一個例外,您不能將屬性傳播到依賴項的pom中。對於所有意圖和目的,依賴關係的pom在安裝/部署到本地/遠程存儲庫時是固定的。如果通過反應堆解析依賴關係(即將依賴關係作爲當前構建的一部分構建),那麼命令行屬性會在它正在構建時傳播到該依賴關係。