【问题标题】:Replace parameters inside pom.xml替换 pom.xml 中的参数
【发布时间】:2016-09-08 12:16:08
【问题描述】:

如何为 Maven 提供属性并强制它在 pom.xml 文件中实际替换它们?例如。我有一个“模板” pom.xml,用于部署包和一些依赖项。我希望替换 artifactIdversion 和其他变量并上传生成的 pom.xml

使用命令行参数不起作用,例如mvn clean deploy -DartifactId=someArtifact 确实将 jar 上传到正确的位置,但上传的 pom.xml 包含占位符变量而不是它们的实际值。

具体例子:

POM 文件包含此依赖项定义:

    <dependencies>
        <dependency>
            <groupId>com.avast.melka</groupId>
            <artifactId>${runtimeId}</artifactId>
            <version>${runtimeVersion}</version>
        </dependency>
    </dependencies>

我希望 Maven 使用包含以下内容的 POM 部署相应的包:

<dependencies>
    <dependency>
        <groupId>com.avast.melka</groupId>
        <artifactId>actualIdValue</artifactId>
        <version>1.0.42</version>
    </dependency>
</dependencies>

我该怎么做?我能找到的最接近的东西是 http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html - 但这涉及替换资源文件中的值,而不是 POM,对我来说这似乎是一个不同的用例。

【问题讨论】:

  • 我认为没有简单的方法可以做到这一点。 maven-release-plugin 对版本做了类似的事情......我想你可以根据它的作用创建自己的插件。
  • 为什么要部署的工件需要 pom 文件模板?为什么不创建并使用它..除此之外,为什么不通过 mvn deploy 使用 maven 构建?
  • 我想在通用 CI 构建作业中自动使用它,该作业可以由我公司的不同团队实例化并定制以生成不同 GAVC 和依赖项的 maven jar。而不是每个团队都必须手动创建自己的 POM.xml,我想让他们只在实例化构建作业参数时自定义它。除此之外,即使所有变量都“一成不变”,我仍然需要通过构建提供version(第三个数字对应于构建号)。
  • 我已经阅读了一些关于 maven 原型的内容,似乎它们可能是我正在寻找的东西,每个构建都将运行 archetype:generate,然后在创建的 pom.xml 文件上运行“标准”maven。
  • 嗨@MartinMelka,如果这个问题得到解决。您能否发布更新的 pom 文件/答案。

标签: java maven templates


【解决方案1】:

您可以使用替换插件。插件的更详细使用方法请参见互联网。

警告 1: 我不认为替换 artifactId 是一种可维护的策略。但这是你的选择。

警告 2: 仅在仅在此特定版本上激活的配置文件中定义此插件。否则这个插件执行会被继承到子项目,这可能是个坏主意。

您的配置应该类似于:

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <executions>
        <execution>
            <id>yourId</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <replacements>
                    <replacement>
                        <token><![CDATA[<version>[$][{]runtimeVersion[}]</version>]]></token>
                        <value><![CDATA[<version>1.0.42</version>]]></value>
                    </replacement>
                </replacements>
            </configuration>
        </execution>
    </executions>
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 2014-11-10
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2013-06-29
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多