1

我正在尝试发布我们的多模块 Maven 项目,但我不知道如何正确更新 POM 中的版本号。

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

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

  • 该插件仅更新我的顶级 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]
4

1 回答 1

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 依赖管理。

通常像这样的外部 pom 用于放置公司信息、存储库路径之类的东西,并且它们被许多不同的项目共享。

于 2013-04-19T19:23:27.163 回答