【问题标题】:maven update pom propertymaven 更新 pom 属性
【发布时间】:2013-07-19 06:40:28
【问题描述】:

我正在寻找一种将 pom 属性更新为给定值的方法,即我的 pom.xml 包含:

<properties>
    <abc.def>aaaaa</abc.def>
<properties>

现在我想打电话:

mvn some_plugin:some_goal -Dabc.def=XYZ

最后我的 pom.xml 应该是这样的

<properties>
    <abc.def>XYZ</abc.def>
<properties>

我正在阅读有关 maven-release-plugin 和 versions-maven-plugin 的信息,但我没有看到任何匹配的目标。

提前感谢您的任何回复。

【问题讨论】:

  • 这些属性是依赖版本的吗?
  • 是的,他们是。我需要做的就是更新 pom.xml 中的属性并通过 Jenkins 调用 maven 命令将其提交给 SVN。
  • 比以update-properties为目标的versions-maven-plugin是正确的选择。
  • khmarbaise,谢谢您的回答。据我检查(在文档和简单示例中)versions-maven-plugin 的 update-properties 目标“将属性设置为特定工件的最新版本”,这在我的构建中并不总是可能的,它会更新 pom.xml ,而不是特定属性。如果我遗漏了什么,请告诉我:)
  • 但是你可以在命令行上给参数看文档!

标签: maven plugins


【解决方案1】:

mvn versions:update-properties -Dproperties=[XYZ] -DincludeProperties={abc.def}

阅读更多here。 和here

简而言之:

在versions-maven-plugin 中,update-properties 目标将属性设置为特定工件的最新版本。

includeProperties 是要更新的属性的逗号分隔列表。

properties 是适用于特定属性的任何限制。

【讨论】:

  • 能详细解释一下这个语法吗?
  • 我知道那个文档,但它也没有真正解释它。 “-Dproperties”实际上是 Property 类型(请参阅:mojo.codehaus.org/versions-maven-plugin/…),因此我不明白您尝试使用“-Dproperties=[XYZ]”做什么。你的例子不适合我。
  • @PawełDulęba 问题中的 XYZ 是他想要设置的新版本。
  • 由于 codehaus 已关闭,您现在可以在 mojohaus.org/versions-maven-plugin 找到文档
  • 这对我不起作用 - 它总是尝试获取最新版本,这可能不合适。并非所有属性也适用于版本。 sed -i "s|&lt;abc.def&gt;.*&lt;/abc.def&gt;|\&lt;abc.def&gt;XYZ\&lt;/abc.def&gt;|" pom.xml
【解决方案2】:

接受的答案不适用于任意值,因为它执行sanity checks(链接到set-property 目标的文档,因为出于某种原因update-properties 的文档没有提到这一点)。

要在属性上设置一些任意值,请使用 set-property,因为 - 如文档所述 - 它会跳过完整性检查:

mvn versions:set-property -Dproperty=your.property -DnewVersion=some_value

【讨论】:

  • 这应该是公认的答案。这回答了“将属性更改为任意值”问题
【解决方案3】:

好的,我找到了一些解决方案。我正在使用 maven-replacer-plugin : 我在 pom.xml 中的属性定义:

        <properties>
        <abc.def>aaaaa</abc.def>
    <properties>

我的插件配置:

                <plugin>
           <groupId>com.google.code.maven-replacer-plugin</groupId>
           <artifactId>replacer</artifactId>
           <version>1.5.2</version>
           <configuration>
               <file>pom.xml</file>
               <replacements>
                   <replacement>
                       <token>${abc.def}</token>
                       <value>${replacer.abc.def}</value>
                   </replacement>         
               </replacements>
           </configuration>
        </plugin>

最后是我的 Maven 调用:

mvn replacer:replace -Dreplacer.abc.def=XYZ

它对我有用,但我不知道有没有更好的方法来使用 maven-relase-plugin 和/或versions-maven-plugin 实现它,正如@khmarbaise 和@Conan 所说。

【讨论】:

    【解决方案4】:

    我同意上面的@khmarbaise,versions-maven-plugin 可以做到这一点,或者如果你想要一种更强大的方法来管理你的版本,你可以转移到Maven Release Plugin,但你也可以只运行一个脚本使用 Jenkins 的 BUILD_NUMBER 环境变量 sed pom.xml 文件,这是一种更快更脏的方法。

    【讨论】:

    • 柯南,请查看我对@khmarbaise 关于versions-maven-plugin 的回答。但我会尝试 maven-release-plugin 和它的目标。
    • Maven 发布插件可以让您充分控制版本控制,但请注意 - 如果您不按照发布插件希望的方式做所有事情,它会咬您一口!
    猜你喜欢
    • 2014-09-21
    • 2015-09-29
    • 2012-12-22
    • 2012-03-31
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多