2013-08-28 33 views
5

我們在POM中指定versionId,相應的maven生成foo-version.jar。例如:foo-1.0-SNAPSHOT.jar。maven build - 版本信息

是否有可能使用maven做以下事情?

  • 未在POM中指定versionId,但從命令行指定了構建版本。這將有助於不對POM中的版本進行「硬編碼」並對每個版本進行更改,而是通過超級構建腳本進行指定。在POM
+2

更改發佈應發佈的插件,而不是手動完成。 – khmarbaise

+0

如果您的軟件具有特定的二進制版本,您將如何知道使用哪個版本的源代碼來構建它? – artbristol

回答

5

設置的項目版本作爲佔位符

<groupId>test</groupId> 
<artifactId>x</artifactId> 
<version>${project.version}</version> 

現在你可以從命令行傳遞版本

mvn -Dproject.version=1.1.1 package 
+0

我嘗試過在Maven 2的舊版本中,iirc這種方法不起作用。生成的POM生成不可用。 (我希望現在已經有所改進)。這就是爲什麼我需要編寫一個腳本來執行POM的版本更改的原因。 –

+0

這個工作正常,但生成/安裝的POM也有' $ {project.version}'。這不是一個依賴模塊使用這個模塊的問題嗎?可取的是,生成的POM應該具有模塊爲其構建的實際版本。 – gammay

4

你可以使用maven release plugin

release:update-versions -DautoVersionSubmodules=true

,如果你想爲每個模塊相同的版本,你需要autoVersionSubmodules。否則你需要指定每個版本。

這隻會增加您的當前版本,如果你想有一個特定版本添加-DdevelopmentVersion=your version到命令

UPDATE 我發現了另一個插件做的伎倆。 The maven versions plugin

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>versions-maven-plugin</artifactId> 
    <version>2.1</version> 
</plugin> 

使用此命令可以設置版本: versions:set -DnewVersion=your version

+0

當我嘗試第一個選項,我得到這個錯誤:'[錯誤]無法執行目標org.apache.maven.plugins:maven-release-plugin:2.3.2:項目簡單的更新版本(默認 - cli) :缺少必需的設置:必須指定scm連接或developerConnection。 - > [幫助1]'。第二個選項更新*版本後的版本*!無論如何,這個想法是保持版本不在POM中,因爲POM被簽入到CM中,我們不想爲每個版本提交文件。 – gammay

+0

然後你需要添加scm標籤到你的pom,[這裏是](http://maven.apache.org/scm/maven-scm-plugin/usage.html)它的一個例子 – mokuril