如何在Teamcity上为Maven设置多个属性

如何在Teamcity上为Maven设置多个属性,maven,teamcity,maven-release-plugin,Maven,Teamcity,Maven Release Plugin,配置使用Maven runner的“附加Maven命令行参数”设置将属性传递给Maven。 这是通过-Darguments='完成的,因此maven发布插件可以在每次运行时使用参数来派生新进程 对于一个属性,配置为: -DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true' 问题是在传递多个属性时,例如: -DsomeProp=%teamcity.agent.name% -Darguments='-Dimportan

配置使用Maven runner的“附加Maven命令行参数”设置将属性传递给Maven。 这是通过
-Darguments='
完成的,因此
maven发布插件可以在每次运行时使用参数来派生新进程

对于一个属性,配置为:

-DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true'
问题是在传递多个属性时,例如:

-DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true -DsecondProp=file_on_disk.name'
对于多属性配置,生成日志显示
importantProp
被解析为
true-dsecondrop=file\u on_disk.name
,这应该是一个无效值。 第二个属性
secondProp
则不会应用,因为字符串会被
importantProp
的值吸收

这样做的原因是为了简化TeamCity上的测试运行,而不是更改每个测试的POM。
我在TeamCity上几乎看不到这种配置的任何示例。

您的道具不同于
-dsecondrop=true
。因此,您应该只为要构建的过程创建一个道具。让我们命名
mainProp

此外,我们需要添加新的道具,如果未选中,则该道具包含空道具;如果选中,则该道具包含
-dsecondrop=true
。使用创建复选框参数
additionalParam

  • 选中值-
    -dsecondrop=true
  • 未选中的值-``(无)
现在我们需要将这个cb参数添加到mainProp中。
mainProp=-DsomeProp=%teamcity.agent.name%-Darguments='-DimportantProp=true%additionalParam%'


当您触发构建时,您可以选中复选框并传递
-DsomeProp=%teamcity.agent.name%-Darguments='-DimportantProp=true-dsecondrop=true
您的道具不同于
-dsecondrop=true
。因此,您应该只为要构建的过程创建一个道具。让我们命名
mainProp

此外,我们需要添加新的道具,如果未选中,则该道具包含空道具;如果选中,则该道具包含
-dsecondrop=true
。使用创建复选框参数
additionalParam

  • 选中值-
    -dsecondrop=true
  • 未选中的值-``(无)
现在我们需要将这个cb参数添加到mainProp中。
mainProp=-DsomeProp=%teamcity.agent.name%-Darguments='-DimportantProp=true%additionalParam%'


触发生成时,您可以选中复选框并传递
-DsomeProp=%teamcity.agent.name%-Darguments='-DimportantProp=true-dsecondrop=true

将配置参数应用于配置两次已奏效。感谢高级波米多的配置参数建议

在生成参数或生成模板中创建配置参数
%mavenArguments%

-DpropCheck=true -DpropPath=file_on_disk-1.path
然后在Maven构建步骤上的
附加Maven命令行参数中应用提供的配置参数(直接作用于构建步骤或通过构建模板),如下所示:

%mavenArguments%
-Darguments='%mavenArguments%'

我仍然不知道为什么它不能通过直接写入
附加Maven命令行参数来正确应用,但它最终起作用了。

将配置参数应用于配置两次已经起作用了。感谢高级波米多的配置参数建议

在生成参数或生成模板中创建配置参数
%mavenArguments%

-DpropCheck=true -DpropPath=file_on_disk-1.path
然后在Maven构建步骤上的
附加Maven命令行参数中应用提供的配置参数(直接作用于构建步骤或通过构建模板),如下所示:

%mavenArguments%
-Darguments='%mavenArguments%'

我仍然不知道为什么它不能通过直接写入
额外的Maven命令行参数来正确应用,但它最终还是起作用了。

我会对它进行测试,但如果我没有弄错的话,它看起来最终会生成传递给Maven的相同字符串。我稍微澄清了一下这个示例,以表明第二个参数实际上是一个文件名。我尝试按照我在回答中所说的传递一个参数,结果传递正确。感谢这个想法,它帮助制定了一个可行的解决方案。我将在答案中发布完整的更改。我将对其进行测试,但如果我没有弄错的话,它看起来会生成最终传递给maven的相同字符串。我稍微澄清了一下这个示例,以表明第二个参数实际上是一个文件名。我尝试按照我在回答中所说的传递一个参数,结果传递正确。感谢这个想法,它帮助制定了一个可行的解决方案。我将在回答中发布完整的更改。