В проекте Maven, как я могу автоматически обновить версию всех дочерних модулей, плюс родительский?

StackOverflow https://stackoverflow.com/questions/2341906

Вопрос

У меня есть многомодульный проект.

parent POM (1.0-SNAPSHOT)
|-- module1 (1.0-SNAPSHOT)
|-- module2 (1.0-SNAPSHOT)
`-- module3 (1.0-SNAPSHOT)

Когда я выполняю mvn release: подготовьте его, убедитесь, что родительский POM имеет версию моментального снимка, а все зависимые модули не имеют версии моментального снимка.Как автоматически обновить все дочерние модули из моментального снимка до следующей версии выпуска?

Я хотел бы автоматически увеличивать версию для всех модулей.

Это было полезно?

Решение

Плагин release может справиться с этим.Вы проверяли Обновление версий POM?Но...Я чего-то не понимаю. Изменение версии в POMS с x-SNAPSHOT на новую версию и изменение версии в POMs на новое значение y-SNAPSHOT должно быть сделано с помощью release:prepare как объяснено в Подготовьте релиз.Что происходит не так при использовании этой цели?

Обновить: В autoVersionSubmodules параметр может быть тем, что вы ищете.Из Подготовьте релиз пример:

Многомодульные проекты

Вам будет предложено ввести версию номер для каждого модуля проекта.Если вы предпочитаете, чтобы каждый модуль получал ту же версию, что и родительский POM, вы можете установить параметр autoVersionSubmodules Для true.Теперь вас попросят только один раз указать версию для выпуска и следующую версию для разработки.

Фрагмент родительского pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>x.y.z</version>
            <configuration>
                <goals>deploy</goals>
                <autoversionsubmodules>true</autoversionsubmodules>
            </configuration>
        </plugin>
    </plugins>
</build>

Другие советы

Гибкий способ настройки версий poms, включая многомодульные проекты, заключается в Версии плагина Maven.

mvn versions:set -DnewVersion=your_new_version

Это скорректирует все версии pom, родительские версии и дочерние версии в многомодульном проекте.

тогда

mvn versions:commit

или

mvn versions:revert
  1. Сделайте так, чтобы версия всего подпроекта была определена в его родительском элементе pom.xml.
  2. Убедитесь, что версии всех подпроектов совпадают с версией их родителя.

    <groupId>com.xyz</groupId>
    <artifactId>module-1</artifactId>
    <packaging>jar</packaging>
    
    <parent>
      <groupId>com.xyz</groupId>
      <artifactId>xyz-parent</artifactId>
      <version>1.0.123-SNAPSHOT</version>
    </parent>
    

     

    <?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>
      <artifactId>xyz-parent</artifactId>
      <groupId>com.xyz</groupId>
      <version>1.0.123-SNAPSHOT</version>
      <packaging>pom</packaging>
      <name>xyz-parent</name>
    
      <dependencyManagement>
        <dependencies>
    
        <!-- Message -->
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-1</artifactId>
          <version>${project.version}</version>
        </dependency>
    
        <dependency>
          <groupId>com.xyz</groupId>
          <artifactId>module-2</artifactId>
          <version>${project.version}</version>
        </dependency>
    
      </dependencyManagement>
    </project>
    
  3. Создайте еще один pom.xml чтобы сгруппировать эти проекты вместе.

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
  4. Затем обновите версию родительского проекта, а затем создайте его с помощью приведенной ниже команды.

    mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT
    mvn clean install
    
  5. Затем обновите родительскую версию, которая определена в этих подпроектах, до версии latset

    mvn -N versions:update-child-modules
    
  6. Затем соберите их вместе.

    @echo on
    cd   .\xyz-parent
    call mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT -o
    call mvn versions:commit -o
    call mvn clean install -o
    :::http://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
    cd ..\xyz-buildaggregate-ide
    call mvn -N versions:update-child-modules -o
    call mvn clean install -o
    

Есть потенциально лучший вариант по адресу https://issues.apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14415968

Это обходной путь для того факта, что вы не можете ссылаться на pom верхнего уровня в poms подмодуля без указания явной версии.(именно об этом и идет речь в ошибке MNG-624) В нем объясняется, как вы можете иметь единственное местоположение для версии (в файле верхнего уровня profiles.xml) и просто иметь ссылки на свойства во всех файлах pom.xml (т.е.${CurrentVersion})

Однако в этой схеме release:prepare, вероятно, не будет обновляться profiles.xml для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top