我有一个多模块maven项目,它包含在每个pom上定义的相同项目版本。
<version>1.0.0.0.0-SNAPSHOT<\version>
我使用maven apache-maven-2.2.1
每当我们有新的分支,版本或需要更新版本时,我们都会使用命令来更改所有版本并提交它。
为了好奇,这里是查找和替换的命令:
find . -type f -name pom.xml -print | xargs perl -pi -e 's@>'$version'<@>'$newVersion'<@g'
通过这种方式,我每次在每个pom上合并两个版本时都会产生冲突,因为版本总是不同。
版本1: 1.0.0.0.1-SNAPSHOT
版本2: 1.0.0.0.0-FEATURE-SNAPSHOT
使用subversion,我可以通过使用mine-conflict选项轻松解决这些冲突,该选项合并了在同一行中未进行的每个修改,并接受我的版本以解决所有冲突。
不幸的是,git不能以这种方式工作,我能做的最多就是使用类似“我满的”(它接受我的整个文件的版本 - 甚至是非冲突)或“他们满的”(这是接受他们的整个文件的版本),这可能会留下我选择忽略的文件。
我决定在每个版本的每个pom上放置一个静态版本(或变量),每次我必须使用mvn命令时,我将设置它。
我的项目中有四种类型的poms,它们排列如下:
POM 1) 的 PROJECTNAME /主/超亲/ pom.xml的
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.company.product.parent</groupId>
<artifactId>company-product-super-parent</artifactId>
<version>1.0.0.0.0-SNAPSHOT</version>
...
</project>
POM 2)
的 PROJECTNAME /主/ module_A /丰特斯/组件/ pom.xml的
<project ...>
<parent>
<groupId>br.com.company.product.parent</groupId>
<artifactId>company-product-super-parent</artifactId>
<version>1.0.0.0.0-SNAPSHOT</version>
</parent>
...
<groupId>br.com.company.product.moduleA</groupId>
<artifactId>company-moduleA</artifactId>
<name>Company PRODUCT - company-moduleA</name>
<packaging>pom</packaging>
POM 3) projectName / main / module_A / fontes / components / parent / pom.xml
<project ...>
<parent>
<groupId>br.com.company.product.parent</groupId>
<artifactId>company-product-super-parent</artifactId>
<version>1.0.0.0.0-SNAPSHOT</version>
</parent>
...
<groupId>br.com.company.product.moduleA</groupId>
<artifactId>company-moduleA-parent</artifactId>
<packaging>pom</packaging>
<name>Company Product - company-moduleA-parent</name>
<description>Company ModuleA</description>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>br.com.company.product.moduleA</groupId>
<artifactId>company-moduleA-submoduleA1</artifactId>
<version>1.0.0.0.0-SNAPSHOT</version>
</dependency>
<dependency>
...
</dependency>
POM 4)
的 PROJECTNAME /主/ module_A /丰特斯/组件/ DIR1 / DIR2 /(...)/ pom.xml的
<project ...>
<parent>
<groupId>br.com.company.product.moduleA</groupId>
<artifactId>company-moduleA-parent</artifactId>
<version>1.0.0.0.0-SNAPSHOT</version>
</parent>
<name>Company PRODUCT - company-moduleA-submoduleA1</name>
<description>Company ModuleA SubmoduleA1.</description>
<artifactId>company-moduleA-submoduleA1</artifactId>
<groupId>br.com.company.product.landbase</groupId>
我可以使用什么策略来避免冲突,同时合并上述场景中可以在Jenkins上运行的两个版本?