Плагин выпуска Maven: создать тег без зависимостей SNAPSHOT

Я использую плагин выпуска Maven, и я пытаюсь сделать выпуск. Когда я нахожусь на мастере (я использую Git), у меня есть версии SNAPSHOT как для моего проекта (мультимодуль), так и для моих зависимостей (тоже мультимодуль).

Предположим, я хочу сделать тег из master (пропустив создание ветки), где не используются SNAPSHOT.

Это мой упрощенный 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>

If I do:

выпуск mvn: подготовка -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>

person Markos Fragkakis    schedule 06.06.2013    source источник


Ответы (2)


Плагин выпуска не может изменять версии зависимостей в POM, которые не являются частью реактора.

Попробуйте плагин версий Maven. Вы можете использовать versions:use-releases для замены всех зависимости моментального снимка с соответствующими выпусками. Если вы хотите заменить их вручную (возможно, из-за того, что версии отличаются от снимков), вы можете использовать version:set. Но оба не работают с версиями зависимостей, указанными в свойствах. Для свойств versions:update-properties используется параметр настройка allowSnapshots=false. Эта цель работает автоматически, если не требуются специальные диапазоны версий, но ее также можно настроить для удовлетворения таких требований.

Вы можете настроить подключаемый модуль выпуска для вызова подключаемого модуля версий, используя preparaionGoals, как сказал Стивен: <preparationGoals>clean versions:use-releases verify</preparationGoals>

Или вы вызываете плагин версий вручную перед выпуском, например. с участием

mvn version:use-releases scm:checkin -Dmessage="Выпустить версии зависимостей"

person Marc von Renteln    schedule 06.06.2013

Плагин выпуска не предназначен для решения этого варианта использования.

Возможно, вы сможете добиться чего-то, перехватив preparationGoals и completionGoals для вызова плагинов, которые редактируют ваш pom... Конечно, это был вариант использования, который я имел в виду, когда добавлял completionGoals

Но на данный момент, из-за отсутствия возможности получить плагин для редактирования и отмены редактирования вашего pom, чтобы установить версии, вам придется жить с редактированием вручную.

person Stephen Connolly    schedule 06.06.2013