3

我正在尝试将 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

我正进入(状态:

[错误] 无法在项目项目根目录上执行目标 org.apache.maven.plugins:maven-release-plugin:2.4:prepare (default-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"  
4

2 回答 2

6

你将不得不使用参数属性: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} 的使用需要使用大写的属性名称(待验证)

于 2013-07-12T12:41:54.070 回答
0

它不起作用,因为发布插件清除了环境[1]。我怀疑它是否已记录在案[2],我通过查看源代码发现了这一点。Farid 的回答是一个很好的解决方法 - 它通过未清除的 java 属性传递环境值。

我会简单地评论 Farid 的回答,但 SO 认为我不够闪亮。

  1. 为什么??
  2. 经典的行家。
于 2014-10-06T10:33:03.687 回答