Плагин maven версии не обновляет версии для реактора

В настоящее время я пытаюсь обновить зависимости для внутренних библиотек с помощью плагина версий от maven. Плагин аккуратно обновляет внешние библиотеки, но не изменяет библиотеки мультимодулей.

Чтобы описать то, что я сделал раньше

Я создаю их раньше, чтобы файлы были с новыми версиями.

В каждом подмодуле я использовал версии: установил новую версию (я перебрал различные подмодули, так как основная и вспомогательная версии могут отличаться для каждой библиотеки в родительском проекте) и построил их, успешно привязанные к старой версии.

Теперь я хочу использовать плагин версии, чтобы установить новую версию во всех зависимостях, а затем перестроить.

когда я выполню:

mvn -X versions:use-latest-snapshots -DexcludeReactor=false -DallowSnapshots=true -DallowMajorUpdates=true -DallowMinorUpdates=true

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

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19.4</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.19.4</version>
    </dependency>
    <dependency>
        <groupId>nl.blablub</groupId>
        <artifactId>dao</artifactId>
        <version>2.0.0-SNAPSHOT</version>
    </dependency>

например. Я вижу, что он ищет детали трикотажа, но не внутренние.

[DEBUG]   (f) allowIncrementalUpdates = true
[DEBUG]   (f) allowMajorUpdates = true
[DEBUG]   (f) allowMinorUpdates = true
[DEBUG]   (f) allowSnapshots = true
[DEBUG]   (f) excludeReactor = false
[DEBUG]   (f) generateBackupPoms = true
[DEBUG]   (f) localRepository =       id: local
      url: file:///home/xtroce/.m2/repository/
   layout: default
snapshots: [enabled => true, update => always]
releases: [enabled => true, update => always]

[DEBUG]   (f) processDependencies = true
[DEBUG]   (f) processDependencyManagement = true
[DEBUG]   (f) processParent = false
[DEBUG]   (s) project = MavenProject: nl.blablub:libs-mvn:0.0.1-SNAPSHOT @ /home/xtroce/development/blablub-java-repo/libs-mvn/pom.xml
[DEBUG]   (f) reactorProjects = [MavenProject: nl.blablub:libs-mvn:0.0.1-SNAPSHOT @ /home/xtroce/development/blablub-java-repo/libs-mvn/pom.xml, MavenProject: nl.blablub:base-rest-api:2.0.4-SNAPSHOT @ /home/xtroce/development/blablub-java-repo/libs-mvn/base-rest-api/trunk/pom.xml, ... ]
[DEBUG]   (f) remoteArtifactRepositories = [      id: public ...

РЕДАКТИРОВАТЬ, чтобы привести пример проекта:

структура будет следующей: test - subtest-a - subtest-b

помпы являются:

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>subtesta</module>
        <module>subtestb</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.5</version>
            </plugin>
        </plugins>

    </build>
    <repositories>

        <repository>
            <id>public</id>
            <name>External Dependencies</name>
            <url>http://localhost:8081/repository/maven-public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <!-- pull from Release Repository -->
        <repository>
            <id>minc-releases</id>
            <name>Release Directory</name>
            <url>http://localhost:8081/repository/maven-releases</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <!-- pull from Snapshot Repository -->
        <repository>
            <id>minc-snapshots</id>
            <name>Snapshot Repository</name>
            <url>http://localhost:8081/repository/maven-snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

пом от подтеста-а:

<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test</artifactId>
        <groupId>test</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>subtest-a</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

Пом подтест-б:

<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test</artifactId>
        <groupId>test</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>subtest-b</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>test</groupId>
        <artifactId>subtest-a</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    </dependencies>
</project>

шаги: я делаю mvn чистую установку

он собирается нормально, затем: увеличьте номер версии subtest-a до 1.1-SNAPSHOT

дальше: установить mvn

Теперь я могу видеть 1.1-SNAPSHOT в моем ~/.m2/ хранилище

Затем я запускаю команду

mvn -X versions:use-latest-snapshots -DexcludeReactor=false -DallowSnapshots=true -DallowMajorUpdates=true -DallowMinorUpdates=true

он не увеличивает номер версии, даже если более высокая версия отображается в упаковках реактора, и корректные переменные для игнорирования материалов реактора передаются maven. в отладке я вижу, что он даже не пытается получить номер версии подтеста-проекта.

если я запускаю ту же команду с use-latest-release, он увеличивает номер версии джерси с 1.19 до 1.19.4, так что плагин работает для внешних зависимостей, но не для зависимостей, которые передаются через реактор.

Однако при освобождении lockFile для локального репозитория возникает ошибка, которая может иметь к этому какое-то отношение, но я сомневаюсь в этом, поскольку даже не вижу зависимости subtest-a в контрольном списке зависимостей проектов subtest-b.

Я помещаю журнал с выводом отладки на pastebin

https://pastebin.com/NNaSu5DJ

РЕДАКТИРОВАТЬ 2

При обновлении всех версий до версии, отличной от SNAPSHOT, и тестировании с целью "использовать последние версии" и теми же параметрами командной строки все работает, как и ожидалось. Версия subtest-b обновляется, если subtest-a меняет версию. Так что, похоже, ошибка в использовании последней части снимка.

1 ответ

Решение

Проблема в том, что я не смог правильно прочитать документацию. Говорится

versions:use-latest-snapshots searches the pom for all non-SNAPSHOT versions which have been a newer -SNAPSHOT version and replaces them with the latest -SNAPSHOT version.

Проблема в том, что я пытался обновить версии SNAPSHOT, хотя в документации говорится, что это невозможно. При использовании "use-latest-version" я могу делать именно то, что хочу.

versions:use-latest-versions searches the pom for all versions which have been a newer version and replaces them with the latest version. 
Другие вопросы по тегам