【问题标题】:How to use Maven Release Plugin with Multiple Maven Projects如何在多个 Maven 项目中使用 Maven 发布插件
【发布时间】:2013-03-24 23:33:20
【问题描述】:

我正在使用 Maven 3。

我有多个 maven 项目,即:“数据模型”、“服务”和“演示”,分为 3 个不同的项目。它们是单独配置的(即不使用 maven 父 pom)。

我在我的项目上正确设置了 maven 发布插件,这样当我在每个单独的项目上运行 mvn release:clean release:prepare release:perform 时,它会更新项目版本(即:从 3.4.5-SNAPSHOT 到 3.4.5)以及所有其他的。

这里的问题是,'presentation'依赖于'service'依赖于'data model',我在pom文件中引用了带有版本号的项目。

例如,在我开发时,我会将“演示文稿”中的“服务”称为 3.4.5-SNAPSHOT。但是在部署期间,我必须发布“服务”以将版本更改为 3.4.5,然后我必须在“演示”中更新“服务”的版本引用,然后才能在“演示”上运行发布。

有没有一种自动化的方式来做到这一点,这样我就不需要在发布期间更新依赖项目的引用?

感谢下面的 cmets 我有什么:更新:25/03/2013

使用以下命令运行 maven:

versions:use-releases -Dmessage="update from snapshot to release" scm:checkin release:clean release:prepare release:perform

结果:版本已更新,但发布构建失败。

【问题讨论】:

    标签: java continuous-integration maven-3 maven-release-plugin


    【解决方案1】:

    Versions Maven Plugin 可以帮助您实现要求,尤其是目标versions:use-releases。您可能对目标versions:use-next-releasesversions:use-latest-releases 也感兴趣。

    旁注:

    通常,好的做法是将它们定义为 Maven 多模块(herehere)。这让我们可以更轻松地管理版本,如下例所示。

    父母

    <groupId>my-group</groupId>
    <artifactId>my-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    
        .....
    
    <modules>
        <module>my-model</module>
        <module>my-service</module>
        <module>my-ui</module>
    </modules>
    

    我的模型

    <parent>
        <groupId>my-group</groupId>
        <artifactId>my-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>my-model</artifactId>
    

    我的服务

    <parent>
        <groupId>my-group</groupId>
        <artifactId>my-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>my-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my-model</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    

    我的用户界面

    <parent>
        <groupId>my-group</groupId>
        <artifactId>my-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>my-ui</artifactId>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my-service</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    

    对于上面的例子,当我们发布时,相关版本会根据父版本自动更新。

    【讨论】:

    • versions:use-releases 看起来正是我所需要的。我会对其进行设置和测试。让你知道。 =)
    • version:use-release 从版本中删除“SNAPSHOT”,但是当我使用:“mvn version:use-release release:clean release:prepare release:perform”运行它时,它给出了我:无法在项目 [Presentation] 上执行目标 org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli):无法准备发布,因为您有本地修改:[ERROR] [pom. xml.versionsBackup:unknown] [错误] [pom.xml:modified]
    • 恐怕您可能需要在发布之前提交一次更改。由于版本:use-releases 更改了 pom.xml,因为它提到您有本地修改。
    • 刚刚用 'version.. scm:checkin ... release ...' 尝试过,但得到以下错误: Failed to execute goal org.apache.maven.plugins:maven-release- plugin:2.0:prepare (default-cli) on project [Presentation]:无法准备发布,因为您有本地修改:[ERROR] [pom.xml.versionsBackup:unknown]。理想的解决方案是以某种方式使其自动化......
    • 您可能需要创建一个包含org.apache.maven.plugins:maven-scm-pluginphase:installgoal:checkin 的配置文件。连同version:use-release。解决方案可能类似于 mvn -Pnew-profile release...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2019-10-20
    • 1970-01-01
    • 2014-07-27
    • 2012-11-10
    • 2021-09-16
    相关资源
    最近更新 更多