Pergunta

Eu estou atualizando um grande acúmulo de sistema para usar Maven2 em vez de Ant, e temos dois requisitos relacionados que eu estou preso em:

  1. Precisamos gerar um artefato com carimbo de tempo, então uma parte do pacote fase (ou onde), em vez de construir

    project-1.0-SNAPSHOT.jar
    

    deve ser a construção

    project-1.0-20090803125803.jar
    

    (onde o 20090803125803 é apenas um YYYYMMDDHHMMSS carimbo de tempo de quando o frasco é construído).

    O requisito apenas real é que o carimbo de tempo ser uma parte do filename do arquivo gerado.

  2. O mesmo carimbo de tempo tem de ser incluído dentro de um version.properties arquivo dentro do frasco gerado.

Esta informação está incluída no gerado pom.properties quando você executa, por exemplo, mvn package mas é comentado:

#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009

Todas as ideias sobre onde começar seria útil! Obrigado!

Foi útil?

Solução

versões Maven 2.1.0-M1 ou mais recente têm construído em maven.build.timestamp variável especial.

<build>
  <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>

Veja Maven documentação para obter mais detalhes .


Para versões mais antigas do Maven uma olhada maven-timestamp-plugin ou buildnumber-maven-plugin .

Se você usar maven-timestamp-plugin, você pode usar algo como isto para manipular resultando nome artefato.

<build>
   <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>

E esta configuração para maven-buildnumber-plugin deve criar uma propriedade $ {timestamp} que contém o valor timestamp. Não parece ser uma maneira de criar o version.properties arquivo diretamente com este plugin.

<configuration>
   <format>{0,date,yyyyMMddHHmmss}</format>
   <items>
      <item>timestamp</item>
   </items>

</configuration>

Estes três < a href = "http://pteropus.blogspot.com/2007/03/from-maven-to-mvn-part-5.html" rel = "noreferrer"> locais também vale a pena conferir.

Outras dicas

Se você usar uma versão do Maven> = 2.1.0-M1, então você pode usar o {maven.build.timestamp} propriedade $.

Para obter mais informações, consulte: http://maven.apache.org/guides/introduction /introduction-to-the-pom.html#Available_Variables

Se você precisar o tempo em um fuso horário diferente do UTC (o padrão quando você usa ${maven.build.timestamp}) você poderia usar o build-helper-maven-plugin. Veja mais em sobre como usar a construir metas de Helper Maven Plugin .

De qualquer forma, é assim que eu tenho o timestamp no GMT-5 e colocá-lo em nome final do meu artefato:

  <build>
      <plugins>
          <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <version>1.9.1</version>
              <executions>
                  <execution>
                      <id>timestamp-property</id>
                      <goals>
                          <goal>timestamp-property</goal>
                      </goals>
                      <configuration>
                          <name>current.time</name>
                          <pattern>yyyyMMdd-HHmmss</pattern>
                          <timeZone>GMT-5</timeZone>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                  <finalName>${project.name}-${current.time}</finalName>
              </configuration>
          </plugin>
      </plugins>
  </build>

Este post (especialmente o abaixo parte) também é muito útil e prático para esta questão.

Stamping Versão Número e tempo de construção em um arquivo de propriedades com Maven

O pom será parecido com este

...
<properties>

        ....

        <!-- Timestamp of build  -->
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyy_MM_dd_HH_mm</maven.build.timestamp.format>

</properties>

...

<build>
        <finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                ....
            </plugin>
        </plugins>
</build>
....

e o nome do pacote é MyProject-1.0. 0-2015_03_02_13_46.war

Quando um projeto INSTANTÂNEO for implantado, por padrão um timestamp é usado a menos que você substituí-lo na Implementar Plugin . Se você não está recebendo timestamps únicas, é provavelmente baixo para uma configuração de seu repositório Maven. Como a outra resposta diz, porém, usar o timestamp ou buildnumber plugin para lançamentos.

Precisamos de uma resposta mais recente :) É construir agora: http: //maven.apache .org / guias / introdução / introdução-to-the-pom.html # Available_Variables

uso ${maven.build.timestamp}

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