【问题标题】:Maven 3.3 override versionMaven 3.3 覆盖版本
【发布时间】:2015-08-21 13:42:10
【问题描述】:

我正在使用 Maven 3.3.3。我刚从 3.1.1 升级,发现不能再传一个版本了。

pom.xml

<modelVersion>4.0.0</modelVersion>
<groupId>com.hello.world</groupId>
<artifactId>helloworld</artifactId>
<version>${VERSION_NUMBER}</version>
<packaging>pom</packaging>
<properties>
    <VERSION_NUMBER>LOCAL-ONLY-SNAPSHOT</VERSION_NUMBER>
</properties>

mvn 包 -DVERSION_NUMBER=1.2.3

升级到 Maven 3.3.3 后,我现在收到错误消息: [错误] 版本必须是常量

我的目标是能够传入版本号,并且在 pom.xml 中永远不会有实际数字。我不想使用版本插件,因为这实际上会更改 pom.xml 以使用特定的版本号。源代码管理中没有版本号。

【问题讨论】:

  • 看看这个可能对你有帮助*.com/questions/1981151/…
  • @SubodhJoshi 该链接仍然没有与我的问题相关的答案。我仍然需要弄清楚如何在版本中使用 buildnumber-maven-plugin 中的 ${buildNumber}?
  • 我怀疑您是否已从 Maven 版本 3.1.3 更新?不存在....

标签: java maven versioning pom.xml


【解决方案1】:

不幸的是,在最新版本的 maven 中无法执行您正在尝试的操作 - 该版本是构建过程不可或缺的一部分,您必须在 POM 中明确指定它。

解决它的唯一方法(我并不是说这是一个好主意)是在您的 maven 命令之前添加一个预处理步骤,例如使用sed 修改 POM 并设置您想要的任何版本号。

只是出于好奇,你为什么要这样做?

【讨论】:

  • 我想让我的 CI 服务器 (Jenkins) 来管理所有版本控制和发布,而不用让任何开发人员担心。
【解决方案2】:

您必须使用以下属性之一或组合:

${revision}, ${changelist}, and ${sha1}. 

这就是它不起作用的原因。

【讨论】:

  • 您能解释一下这是如何工作的吗?我用修订版替换了 VERSION_NUMBER,我得到了同样的错误 - 版本必须是一个常量。