在多模块maven项目中通过Jenkins设置pom版本

时间:2015-05-06 17:41:19

标签: maven jenkins pom.xml

我有一个多模块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上运行的两个版本?

0 个答案:

没有答案