2013-08-28 88 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