8

我有一个 Maven 项目“核心”。在项目的 pom.xml 中,版本为 0.1。我在 Jenkins 中使用参数化构建并设置文本参数 myNewVersion=3.1。我还设定了以下 Maven 目标:

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

构建时,maven 将 pom.xml 中的版本正确更新为“3.1”。然而,maven 部署任务将我的项目部署为“core-0.1”,版本仍然是 0.1。我的 Nexus 中相应 0.1 目录中包含的 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 的版本号部署到 nexus(即 core-3.1.jar 或 core-4.0.jar)。

编辑2: 我走得更远了。我只是使用我在 jenkins 中设置的版本参数作为参数化构建部分中的参数作为 pom 文件中项目的版本号。Maven 警告这样做,但它有效。但是,我所有依赖于“core”的项目现在也需要将“${myNewVersion}”指定为依赖版本。

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

4

2 回答 2

0

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

这可以通过扩大范围来解决versions:set,例如:

versions:set -DgroupId=com.company.* -DartifactId=* -DnewVersion=${myNewVersion} versions:commit deploy
于 2017-10-26T10:31:03.933 回答
0

在您的 pom.xml 中,将版本设置为变量,如下所示:

<version>${version}</version>

然后运行maven

mvn deploy -Dversion=${myNewVersion}
于 2017-09-06T20:21:12.300 回答