2015-05-08 26 views
3

我有一個項目,我試圖用maven安裝。該pom.xml中有幾個屬性時,Maven的安裝命令取決於我們正在試圖建立一個圖書館的任何版本上運行被修改:Maven安裝不尊重命令行參數

<properties> 
    <some-version>0</some-version> 
</properties> 

這裏的零是一個佔位符,我們將在在構建過程中始終指定合法版本。該版本是後來在pom.xml參考指定幾個依賴關係:

<dependencies> 
    <dependency> 
     <groupId>com.mycompany.myproduct</groupId> 
     <artifactId>someOtherProject</artifactId> 
     <version>${some-version}</version> 
    </dependency> 
    </dependencies 

大廈通過化妝完成與以下命令行:

mvn -Dsome-version=1.6.2 

Maven是能夠正確地解析版本和構建爲預期。但是,安裝在我的本地maven倉庫(/home/user/.m2)中的版本沒有正確的版本。所安裝的pom.xml沒有更新的版本我在命令行設置:

[email protected]:~/$ cat /home/user/.m2/repository/com/mycompany/myproduct/myproject/1.0.0/myproject-1.0.0.pom | grep some-version -C 1 

    <properties> 
    <some-version>0</some-version> 
    </properties> 
-- 
     <artifactId>someOtherProject</artifactId> 
     <version>${some-version}</version> 
    </dependency> 
[email protected]:~/$ 

這是防止它依賴於從MyProject的能夠建立任何其他項目,如行家會抱怨它不能找到某個其他項目的版本0:

[ERROR] Failed to execute goal on project myproject: 
Could not resolve dependencies for project mycompany.myproduct:myproject:jar:1.0.0: 
The following artifacts could not be resolved: com.mycompany.myproduct:someOtherProject:jar:0, 
Could not find artifact com.mycompany.myproduct:someOtherProject:jar:0 in central (https://mycompany.com/artifactory/repo/) -> [Help 1] 

我需要做什麼來爲maven安裝更新版本的pom?顯然,一個可怕的駭客解決方案是使用sed並直接修改pom文件,但似乎Maven應該能夠在安裝pom時真正利用命令行設置。否則,在命令行上設置參數的能力在效率上似乎受到顯着限制。

+0

更好地使用[versions](http://mojo.codehaus.org/versions-maven-plugin/)插件及其命令。 –

+0

我們已經使用版本插件,但據我所知,只有設置的項目本身的版本。它不能解決設置屬性的問題。 – user2093082

+0

是的,它反過來工作。我假設你有一個具有父級層次結構的多模塊項目。對不起,如果頁面上的例子沒有提供解決方案。還有中央** <依賴管理> **。 –

回答

1

根據@ JoopEggen的建議,我深入瞭解了Maven版本插件。它提供了一個更新屬性目標,它將實際更新磁盤上的pom.xml值,而不僅僅是在構建階段傳入覆蓋。通過在調用mvn install之前在makefile中調用了

mvn versions:update-property -Dproperty=some-version -DnewVersion=1.6.2 -DsearchReactor=false -DallowSnapshots=true 

,我能夠解決我的問題。必須禁用反應器才能防止插件拒絕在遠程回購中無法找到的值(請參閱here),並且允許使用版本號允許我使用1.6.2-SNAPSHOT等版本號,這在測試時很有用。

1
更好

你可以通過設置在pom.xml你的財產在<properties>標籤這樣的 -

<properties> 
    <property> 
     <name>some-version</name> 
     <value>1.6.2</value> 
    </property> 
</properties> 

如果你使用這個,那麼你就不必每次都提供財產發出從終端mvn命令。

+2

我們將它設置在命令行中,因爲版本不是常量。硬編碼明顯解決了列出的問題,但首先對用例不起作用 - 因此我們爲什麼要通過命令行進行設置。 – user2093082

1

mvn -Dome-version = 1.6.2作爲建築物範圍的替代值,而不是用新值替換原始POM。因此,你看到的行爲。我不知道有任何Maven支持這樣做。