2012-07-19 103 views
7

我有一个Maven项目“核心”。在项目的pom.xml中,版本是0.1。 我在Jenkins中使用了参数化版本,并设置了一个文本参数myNewVersion = 3.1。 我还设置了以下Maven目标:Maven部署忽略由maven-version插件设置的项目版本

versions:set -DnewVersion=${myNewVersion} versions:commit deploy 

当正在修建,行家更新在pom.xml的正确版本为“3.1”。然而,Maven部署任务将我的项目部署为“core-0.1”,版本仍然为0.1。包含在我的Nexus中相应的0.1 dir中的pom文件声明版本号为“3.1”。

我能做些什么来强制maven部署任务使用maven版本插件设置的正确版本?

非常感谢您的帮助。

编辑1: 澄清我的需求:POM中的项目版本不应该声明实际的构建版本。我用它来确定我的“核心”项目与底层系统和API的兼容性。更详细地说:项目“core”从jenkins获得“interfaceVersion = 3.1”或“interfaceVersion = 4.0”参数。这决定了我的核心项目使用哪个版本来依赖于另一个“库”包。

现在,我有两个Jenkins构建作业,一个用于3.1和一个用于4.0核心项目的库项目依赖项。每个从SVN检出相同的项目代码,但将不同的版本参数传递给正在构建的“核心”项目。我想使用这个版本号作为我的项目在pom.xml中的版本号和作为我的jar的部署版本号(即core-3.1.jar或core-4.0.jar)。

编辑2: 我来过一点。我只是将我在jenkins中设置的版本参数用作参数化构建部分中的参数,作为pom文件中的项目版本号。 Maven警告说这样做,但它有效。但是,依赖于“核心”的所有项目现在都需要指定“$ {myNewVersion}”作为依赖版本。

所以我尝试再次使用versions-maven-plugin来设置/覆盖pom文件中的版本,就像我上面所说的那样。但是,现在当使用maven deploy时,我得到了“拒绝访问”的错误。如果我删除“版本:设置-DnewVersion = $ {myNewVersion}版本:提交”,只是使用“部署”,它的工作原理。任何线索如何解决这个问题?

+0

为什么不使用版本插件? – khmarbaise 2012-07-19 17:25:11

+0

AFAIK版本:提交并没有真正落实到供应链管理,这可能通过发布:commit ... – khmarbaise 2012-07-19 17:26:14

+0

按照@khmarbaise的建议,尝试使用M2_release插件。它会自动完成POM版本管理并照顾您的SCM标签/标签:https://wiki.jenkins-ci.org/display/JENKINS/M2+Release+Plugin – 2012-07-19 19:23:02

回答

0

在你的pom.xml中设置的版本为变量,就像这样:

<version>${version}</version> 

然后运行Maven

mvn deploy -Dversion=${myNewVersion} 
0

给任何人有同样的问题,我有同样的问题,它与versions插件相关并使用Aggregator POM。版本更改不会传播到未将其父设置为聚合器pom的子项目。

这可以通过widening固定的versions:set范围,例如:

versions:set -DgroupId=com.company.* -DartifactId=* -DnewVersion=${myNewVersion} versions:commit deploy