当前位置: 首页 > 知识库问答 >
问题:

为什么maven不替换maven release插件发布版本的环境变量?

卢志强
2023-03-14

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

我得到:

[错误]无法执行目标组织。阿帕奇。专家插件:maven release插件:2.4:在项目根上准备(默认cli):解析版本时出错,无法确定下一个版本:无法解析版本字符串:“${env.project.rel.com.mycompany.project:project root}”-

如果我将${env.project.rel.com.mycompany.project: ectect-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"  

共有2个答案

钱华晖
2023-03-14

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

我只会对法里德的回答发表评论,但他认为我不够聪明。

  1. 为什么
  2. 经典的maven
舒飞捷
2023-03-14

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

 类似资料:
  • 所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该

  • 我们在maven发行版和maven版本插件上有一个问题。在詹金斯,我们想做释放自动按下一个按钮。为了消除快照依赖关系,我们希望使用maven versions插件。假设我们有两个项目A(最新版本0.0.1,最新快照0.0.2-快照)和项目B,它们依赖于Projecta-0.0.2-快照,我们希望发布项目B,我们如何将项目Bs依赖项升级到最新可用的发布版本?maven versions插件目标“us

  • 问题内容: 如果我从脚本运行以下命令: 没事。 但是,如果我运行: 我在教程中读到,要从shell替换环境变量,您需要先停止操作,然后对部分进行“引用”,以便不直接替换该部分,这是我所做的,并且仅当该变量在紧接之前定义时才起作用。 我如何被s识别为shell中定义的环境变量? 问题答案: 您的两个示例看起来相同,这使问题难以诊断。潜在问题: 您可能需要双引号,例如 可能包含一个斜杠,在这种情况下,

  • 我使用的是maven release插件,出现以下错误: [错误]无法执行目标组织。阿帕奇。专家plugins:maven release plugin:2.5.3:prepare(默认cli)on project***:“******”的版本未映射- 我从詹金斯那里运行这个任务,源代码在perforce中。我错过了什么?谢谢

  • 我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(

  • maven发布插件到底是什么?它的目的是什么?我在教程中找到了它,但不明白它有什么用处。此外,老师还向我们展示了如何在GitHub上创建标记。maven发布插件和GitHub有什么共同点?