【问题标题】:Maven release plugin: create tag withhout SNAPSHOT depencenciesMaven 发布插件:创建没有 SNAPSHOT 依赖的标签
【发布时间】:2013-06-02 10:40:49
【问题描述】:

我正在使用 Maven 发布插件,并且正在尝试发布。当我在 master(我使用 Git)时,我的项目(多模块)和依赖项(也是多模块)都有 SNAPSHOT 版本。

假设我想从没有使用 SNAPSHOT 的 master 创建一个标签(跳过创建一个分支)。

这是我的简化 pom.xml:

<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>

<artifactId>results</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Results parent module</name>

<modules>
    <module>results-web</module>
    <module>results-persistence</module>
    <module>results-domain</module>
    <module>results-logic</module>
    <module>results-logic-api</module>
    <module>results-ear</module>
    <module>results-configuration</module>
    <module>results-rules-ejb</module>
    <module>results-rules</module>
    <module>results-rest</module>
</modules>

<properties>
    <dependency1.version>1.2.3-SNAPSHOT</main.version>
    <dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <tagNameFormat>@{project.version}</tagNameFormat>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <localCheckout>true</localCheckout>
                    <pushChanges>false</pushChanges>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-domain</artifactId>
            <version>${dependency1.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-enumerations</artifactId>
            <version>${dependency1.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency1-logic</artifactId>
            <version>${dependency1.version}</version>
            <type>ejb</type>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-domain</artifactId>
            <version>${dependency2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-enumerations</artifactId>
            <version>${dependency2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.my.project</groupId>
            <artifactId>dependency2-logic</artifactId>
            <version>${dependency2.version}</version>
            <type>ejb</type>
        </dependency>
    </dependencies>
</dependencyManagement>

如果我这样做:

mvn release:prepare -Darguments="-dependency1.version=1.2.3.0 -Ddependency2.version=3.4.5.0"

这将创建一个仍然具有 SNAPSHOT 依赖项的分支:

<properties>
    <dependency1.version>1.2.3-SNAPSHOT</main.version>
    <dependency2.version>3.4.5-SNAPSHOT</main.version>
</properties>

如何在上面的部分生成标签:

<properties>
        <dependency1.version>1.2.3.0</main.version>
        <dependency2.version>3.4.5.0</main.version>
</properties>

【问题讨论】:

    标签: java maven maven-release-plugin


    【解决方案1】:

    发布插件不能更改 POM 中不属于反应器的依赖版本。

    试试Maven Versions Plugin。您可以使用versions:use-releases 将所有快照依赖项替换为相应的版本。如果您想手动替换它们(可能是因为版本与快照不同),您可以使用versions:set。但两者都不适用于属性中提供的依赖版本。对于属性versions:update-properties 与设置allowSnapshots=false 一起使用。如果不需要特殊的版本范围,这个目标会自动工作,但它也可以配置来处理这些要求。

    您可以配置发布插件以使用 preparaionGoals 调用您的版本插件,正如斯蒂芬所说:&lt;preparationGoals&gt;clean versions:use-releases verify&lt;/preparationGoals&gt;

    或者您在发布之前手动调用版本插件,例如与

    mvn versions:use-releases scm:checkin -Dmessage="Release versions of dependencies"

    【讨论】:

      【解决方案2】:

      发布插件并非旨在解决此用例。

      你也许可以通过劫持 preparationGoalscompletionGoals 来调用编辑你的 pom 的插件来到达某个地方...当然这是我添加 completionGoals 时想到的用例

      但是现在,由于无法获得一个插件来编辑和取消编辑你的 pom 来设置你必须手动编辑的版本

      【讨论】:

        猜你喜欢
        • 2011-04-03
        • 2012-06-02
        • 2011-06-18
        • 2014-07-26
        • 2012-11-10
        • 2011-01-06
        • 2013-07-19
        • 1970-01-01
        相关资源
        最近更新 更多