为啥 maven 不替换 maven-release-plugin 发布版本的环境变量?
Posted
技术标签:
【中文标题】为啥 maven 不替换 maven-release-plugin 发布版本的环境变量?【英文标题】:Why isn't maven replacing the environment variable for the maven-release-plugin release version?为什么 maven 不替换 maven-release-plugin 发布版本的环境变量? 【发布时间】:2013-07-12 11:52:30 【问题描述】:我正在尝试将 maven-release-plugin 与一些环境变量一起使用,但是当我将环境变量用于发布版本时出现问题。 我正在执行:
mvn release:clean --batch-mode -Dtag=$env.tag -Dproject.rel.com.mycompany.project:project-root=$env.project.rel.com.mycompany.project:project-root -Dproject.dev.com.mycompany.project:project-root=$env.project.dev.com.mycompany.project:project-root release:prepare
我得到:
[ERROR] 未能执行目标 org.apache.maven.plugins:maven-release-plugin:2.4:prepare 项目项目根目录上的(默认-cli):解析版本错误, 无法确定下一个版本:无法解析版本字符串: "$env.project.rel.com.mycompany.project:project-root" -> [帮助 1]
如果我将$env.project.rel.com.mycompany.project:project-root
更改为特定版本,该命令将通过。
但正如你所看到的,我正在使用:
$env.tag
$env.project.dev.com.mycompany.project:project-root
没有问题。这是一个错误吗?还是我做错了什么?
补充说明:
环境变量:
tag=2.55
project.rel.com.mycompany.project:project-root=2.55
project.dev.com.mycompany.project:project-root=2.56-SNAPSHOT
我的 Maven 版本是:
C:\>mvn -version
C:\>set MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: C:\Users\John\Documents\apache-maven-3.0.4-bin
Java version: 1.6.0_25, vendor: Sun Microsystems Inc.
Java home: C:\JDK\jdk1.6.0_25\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
【问题讨论】:
【参考方案1】:您必须使用 arguments 属性:http://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#arguments
因此,在您的上下文中,您的 cmd 行将如下所示(也请注意双引号):
mvn release:clean --batch-mode release:prepare "-Darguments=-Dtag=$env.tag -Dproject.rel.com.mycompany.project:project-root=$env.project.rel.com.mycompany.project:project-root -Dproject.dev.com.mycompany.project:project-root=$env.project.dev.com.mycompany.project:project-root"
此外,如果我没记错的话,令牌 $env.X 的使用需要使用大写的属性名称(待验证)
【讨论】:
1.这只给出与 mvn release:clean --batch-mode release:prepare 2 相同的结果。“...in大写...”为什么 $env.tag 工作呢? 现在已经完整阅读了您的原始帖子,env.tag 已正确解析,因为您已在环境中正确设置了属性“tag”。其他的不是因为你用“env”在你的环境中设置了它们。 prefix 从环境属性中删除此前缀,但将其保留在命令行中。希望这能解决您的问题。 ““env.”前缀是我无意中从命令字符串中复制的。我对帖子进行了编辑。所以同样的问题又出现了。顺便说一句,谢谢你的尝试;) 我明白了,不用担心。奇怪的是它不起作用,我使用环境变量从来没有任何问题,但我只使用 maven 2。那些project.rel.com.mycompany.project:project-root
是什么?它们是在你的 pom 中定义的属性吗?我不确定在属性名称中是否允许使用冒号“:”?
"我不确定在属性名称中是否允许使用冒号 ":" ?"和以前一样:) project.dev.com.mycompany.project:project-root=2.56-SNAPSHOT 环境变量有效。只有释放变量没有。它可能是某种只出现在这个星座(windows 版本、maven 和 java 版本)的错误【参考方案2】:
它不起作用,因为发布插件清除了环境[1]。我怀疑它是否已记录在案[2],我通过查看源代码发现了这一点。 Farid 的回答是一个很好的解决方法 - 它通过未清除的 java 属性传递环境值。
我会简单地评论 Farid 的回答,但我认为我不够闪亮。
-
为什么??
经典的 maven。
【讨论】:
以上是关于为啥 maven 不替换 maven-release-plugin 发布版本的环境变量?的主要内容,如果未能解决你的问题,请参考以下文章