0

我需要用${project.version}pom.xml 中的实际值替换所有出现的 。

我可以用 . 来做到这一点maven-flatten-plugin,但这将重写整个 pom.xml 而不仅仅是替换project.version唯一的。

由于我想使用jgitver-maven-plugin我不能使用resolveCiFriendliesOnlyflatten 插件的模式。

有没有一种简单的方法可以只替换整个 pom.xml 中的一个变量?flatten 插件中是否有另一个(隐藏的)选项可以做到这一点?

4

2 回答 2

0

有一些接近您想要实现的目标,但可能已经足够好了。但是,这将解决您选择的 POM 部分中的所有变量。

我使用resolveCiFriendliesOnly了 ,因为它是唯一一种保留原始 POM 的模式。

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
                    <pomElements>
                        <dependencyManagement>resolve</dependencyManagement>
                        <!-- add more sections to resolve -->
                    </pomElements>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

现在,您可以<pomElements>在要解析变量的位置下添加更多部分。resolveCiFriendliesOnly作为, variables和的副作用${revision},将在整个 POM 文件中解析。${sha1}${changelist}

请记住,这flatten-maven-plugin仍然会重写您的 POM,即您可能会重新排序部分、丢失评论、缩进等。

这是您可以配置的部分列表:https: //www.mojohaus.org/flatten-maven-plugin/apidocs/org/codehaus/mojo/flatten/FlattenDescriptor.html

如果resolveCiFriendliesOnly仍然弄乱你的 POM,你可以删除flattenMode,但它会变得疯狂,你必须添加几乎所有可能的部分到<pomElements>withkeep选项,例如

<pomElements>
    <dependencyManagement>resolve</dependencyManagement>
    <!-- keep everything else -->
    <parent>keep</parent>
    <build>keep</build>
    <distributionManagement>keep</distributionManagement>
    <repositories>keep</repositories>
    <pluginRepositories>keep</pluginRepositories>
    <profiles>keep</profiles>
    ...
</pomElements>
于 2021-08-24T14:31:09.937 回答
0

您可以使用 maven 发布插件,特别是 update-versions 目标。

例如: mvn --batch-mode release:update-versions -DdevelopmentVersion=1.2.0-SNAPSHOT

https://maven.apache.org/maven-release/maven-release-plugin/examples/update-versions.html

于 2020-08-31T20:33:06.357 回答