【问题标题】:How to set multiple properties for Maven on Teamcity如何在 Teamcity 上为 Maven 设置多个属性
【发布时间】:2018-06-22 13:12:39
【问题描述】:

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

对于一个属性,配置是:

-DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true'

问题是当像这样传递多个属性时:

-DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true -DsecondProp=file_on_disk.name'

对于多属性配置,构建日志显示importantProp 被解析为true -Dsecondprop=file_on_disk.name,这应该是一个无效值。 第二个属性secondProp 然后不应用,因为字符串被吸收到importantProp 的值中。

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

【问题讨论】:

    标签: maven teamcity maven-release-plugin


    【解决方案1】:

    您的道具与-DsecondProp=true 不同。因此,您应该只创建一个道具来构建通行证。让我们命名mainProp

    此外,我们需要添加新的道具,如果未选中则包含空,如果选中则包含 -DsecondProp=true。使用

    创建复选框参数additionalParam
    • 检查值 - -DsecondProp=true
    • 未经检查的值 - ``(无)

    现在我们需要将这个 cb 参数添加到我们的 mainProp 中。 mainProp = -DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true %additionalParam%'

    当您触发构建时,您可以选中复选框并传递-DsomeProp=%teamcity.agent.name% -Darguments='-DimportantProp=true -DsecondProp=true

    【讨论】:

    • 我会给它一个测试,但如果我没记错的话,它看起来会生成相同的字符串,最后传递给 maven。我稍微澄清了这个例子,以表明第二个参数实际上是一个文件名。
    • 我试图传递一个参数,正如我在答案中所说的,它正确传递了。
    • 感谢这个想法,它有助于制定可行的解决方案。我将在答案中发布完整的更改。
    【解决方案2】:

    将配置参数应用于配置两次已成功。感谢高级Pomidor的配置参数建议。

    在构建参数或构建模板中创建配置参数%mavenArguments%:

    -DpropCheck=true -DpropPath=file_on_disk-1.path
    

    然后在 Maven 构建步骤中应用 Additional Maven command line parameters 中提供的配置参数(直接在构建步骤上或通过构建模板工作),如下所示:

    %mavenArguments%
    -Darguments='%mavenArguments%'
    

    我仍然不知道为什么直接写入Additional Maven command line parameters 没有正确应用它,但它终于可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多