gpt4 book ai didi

maven - 为多模块 Maven 项目合并 Git 流修补程序的最佳工具

转载 作者:行者123 更新时间:2023-12-01 07:02:25 25 4
gpt4 key购买 nike

假设我的开发分支在 v 1.0.1-SNAPSHOT 上,我的主人在 1.0.0 上。
我必须创建一个修补程序。使用 SourceTree 的 Git Flow 菜单(或任何其他工具),我从 master 创建修补程序分支,将 poms 更新到 v 1.0.0.1(使用 mvn 版本:set -DnewVersion=1.0.0.1),然后进行修复。

当我使用 Git-Flow 完成修补程序时,我必须合并回开发分支。这意味着 pom 文件会发生冲突。如果我有一个带有大型模块树的多模块项目,则必须解析所有 pom。在两个分支中更改的其他文件也会发生冲突。

考虑到在修复期间对 pom 没有任何更改,只需使用开发分支上的版本即可解决它们。

这必须为每个修补程序完成,但例如使用 SourceTree,在视觉上很难区分 pom 和其他冲突文件。如果我能以某种方式分离这些文件,我可以通过接受开发分支上已有的内容来安全地忽略和合并这些文件,那就太好了。

最好的方法是什么?

最佳答案

我知道的最简单的解决方案是使用版本的属性而不是文字将它们定义到 pom 文件中。这从 Maven 3.5.0 开始可用.

你可以这样做:

<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
</project>

现在您可以通过以下方式构建它:
mvn -Drevision=1.2.0-SNAPSHOT clean package

但这意味着每次通过命令行调用 Maven 时都要定义修订版,这有点麻烦。因此,您可以通过 .mvn/maven.config 使用该解决方案文件包含:

-版本=1.2.0-快照

您可以像这样在 Maven pom 本身中定义属性:

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
</project>

这意味着您只有一个定义版本的位置,而不是在每个模块等中。

多模块设置也可以这样工作,其中父级的子级可能如下所示:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<version>${revision}</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-child</artifactId>
...
</project>

但请注意,您必须使用 flatten-maven-plugin如果您喜欢 deploy such artifacts to a repository或者只是想做 mvn install .这需要看起来像这样:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>18</version>
</parent>
<groupId>org.apache.maven.ci</groupId>
<artifactId>ci-parent</artifactId>
<name>First CI Friendly</name>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>child1</module>
..
</modules>
</project>

这意味着最终您只有一行正在定义项目的版本,这应该会大大减少这种合并问题。

请仔细阅读文档!

请仅使用 ${revision} , ${changelist}${sha1}目前不支持其他属性。

关于maven - 为多模块 Maven 项目合并 Git 流修补程序的最佳工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44587798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com