Em um projeto Maven, como posso actualizar automaticamente a versão subordinados todos os módulos, além do pai?

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

Pergunta

Eu tenho um multi-módulo de projeto.

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

Quando eu executar mvn de lançamento:prepará-lo, verifique que o pai POM tem uma versão de INSTANTÂNEO e dependente de todos os módulos não possuem uma versão de INSTANTÂNEO.Como atualizar automaticamente todas as criança módulos de SNAPSHOT para o próximo lançamento de versão?

Eu gostaria de incrementar automaticamente versão para todos os módulos.

Foi útil?

Solução

A versão plugin pode lidar com isso.Você checou Atualização de Versões POM?Mas...Eu não entendo algo. Alterando a versão do POMs de x-INSTANTÂNEO para uma nova versão e batendo a versão em POMs para um novo valor de y INSTANTÂNEO deve ser feito por release:prepare como explicado na Preparar o Lançamento de uma versão.O que está errado quando usando este objetivo?

Atualização: O autoVersionSubmodules parâmetro pode ser o que você está procurando.Do Preparar o Lançamento de uma versão exemplo:

Multi-módulo projetos

Você será solicitado para a versão número para cada módulo do projeto.Se você preferir que cada módulo recebe a mesma versão que o pai POM, você pode definir a opção autoVersionSubmodules para true.Agora você será solicitado apenas uma vez para o versão de lançamento e o próximo versão de desenvolvimento.

Fragmento do pai 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>

Outras dicas

Uma maneira flexível de definir versões POMs, projetos de vários módulos incluídos, é Versões MAVEN Plugin.

mvn versions:set -DnewVersion=your_new_version

Ele ajustará todas as versões do POM, versões dos pais e versões de filhos em um projeto multimódulo.

então

mvn versions:commit

ou

mvn versions:revert
  1. Fazer a versão de todos os sub-projeto a ser definido em seu pai pom.xml.
  2. Certifique-se de que todos os sub-projetos versões são as mesmas para seus pais versão.

    <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. Criar outro pom.xml para agrupar os projetos em conjunto.

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
  4. Em seguida, atualizar o projeto do pai da versão e, em seguida, criar comando abaixo.

    mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT
    mvn clean install
    
  5. Em seguida, atualizar o pai da versão que é definido nesses sub-projecto para a latset um

    mvn -N versions:update-child-modules
    
  6. Em seguida, construir-los juntos.

    @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
    

Há uma opção potencialmente melhor em https://issues.apache.org/jira/browse/mng-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabPanels:Comment-TabPaNel#MEMment-Ment-441598

Essa é uma solução alternativa para o fato de que você não pode se referir ao POM de nível superior nos POMs do sub-módulo sem ter uma versão explícita listada. (que é o que se trata Bug MNG-624), explica como você pode ter um único local para a versão (em um arquivo perfis.xml de nível superior) e simplesmente ter referências de propriedade em todos os arquivos pom.xml (ou seja, $ {currentVersion})

No entanto, nesta versão do esquema: Prepare provavelmente não atualizará o perfis.xml para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top