更新多模块Maven项目中的版本

时间:2013-04-11 18:54:40

标签: maven-3

我正在尝试发布我们的多模块Maven项目,我无法弄清楚如何正确更新POM中的版本号。

maven发布插件不会更新父POM dependencyManagement部分中的版本 - 这似乎是一个已知错误。

我尝试使用版本插件,但我有两个问题:

  • 插件只更新我的顶级POM;可能是因为多模块项目POM 模块的POM的paremt POM
  • 更重要的是,我如何模仿发布插件的行为,以自动计算要从POM中的当前版本(例如1.0.0-SNAPSHOT)设置的版本(例如1.0.0)...没有进入perl脚本编写?

任何不涉及脚本的建议,并且不要求我在dependencyManagement之外声明依赖版本将非常感激!

以下是4个POM(模块子目录中的模块POM):

============ pom-parent.xml ==================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.acme</groupId>
    <artifactId>dummy-parent</artifactId>
    <version>2.5</version>

    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.acme</groupId>
                <artifactId>module1</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

=============多模块pom:pom.xml ================

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>multi-module</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>
    <scm>
           <developerConnection>scm:svn:https://svnserver.fairisaac.com:8443/nowhere</developerConnection>
       </scm>
</project>

============== module1 POM:module1 / pom.xml ================

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>../pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>module1</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>jar</packaging>
</project>

=============模块2 POM:module2 / pom.xml =============

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.acme</groupId>
        <artifactId>dummy-parent</artifactId>
        <relativePath>../pom-parent.xml</relativePath>
        <version>2.5</version>
    </parent>

    <groupId>com.acme</groupId>
    <artifactId>module2</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>module1</artifactId>
        </dependency>
    </dependencies>
</project>

=========编辑==============

...如果我使用

替换dependencyManagement部分中的显式版本,它会变得更好
<version>${project.version}</version>

... maven 3.0.4因NPE而失败:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.478s
[INFO] Finished at: Fri Apr 12 12:09:08 CEST 2013
[INFO] Final Memory: 9M/120M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project multi-
module: Execution default-cli of goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare failed. NullPointerExcep
tion -> [Help 1]

1 个答案:

答案 0 :(得分:0)

这不是错误,您展示的第一个pom.xml是在多模块项目之外。 maven-release-plugin会将其视为外部依赖,因此不会更改版本。

但是你的设计存在缺陷,你必须移动

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>module1</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

到您的多模块pom。

我假设您的想法是在一个地方声明模块版本并在所有模块之间共享。因此,模块版本进入了多模块pom dependencyManagement。

通常这样的外部poms用于放置公司信息,存储库路径,这样的事情,并且它们由许多不同的项目共享。