Pergunta

Eu estou tentando adicionar o svn.revision a versão do projeto como um número de compilação e não consigo fazê-lo. Meu frasco tem o nome correto durin embalagem, mas o seu instalado no meu repositório local é como se $ {BuildNumber} é / foi indefinido quando a versão foi definida.

Eu recebo foo-1.0.0-SNAPSHOT- $ {BuildNumber} em vez de foo-1.0.0-SNAPSHOT- 304

Qualquer idéia do que estou fazendo de errado ou está adicionando uma revisão para a versão do projeto uma má idéia? Obrigado pela ajuda.

<project>
  ...
  <version>1.0.0-${release.identifier}-${buildNumber}</version>
  <properties>
    <release.identifier>SNAPSHOT</release.identifier>
  </properties>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>useLastCommittedRevision</id>
            <goals>
              <goal>create</goal>
            </goals>
            <configuration>
              <useLastCommittedRevision>true</useLastCommittedRevision>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  ...
</project>
Foi útil?

Solução

O problema tem duas partes:

  1. Você está tentando definir o buildNumber para a versão antes de ser resolvido por isso será sempre ${buildNumber} em vez do valor resolvido.

    Em vez de tentar alterar dinamicamente a versão, você deve definir o buildNumber no elemento finalName na compilação. Isto irá criar os artefatos com o nome pretendido no repositório local.

  2. A instalação do plugin irá ignorar o finalName e implantá-lo como 1.0.0-SNAPSHOT independentemente, eu não sei de uma maneira de endereço que. O buildNumber é adicionado ao manifesto, se você configurar o plugin como abaixo.

    Assim sua configuração seria algo como:

    <version>1.0.0-${release.identifier}</version>
    ...
    <build>
      <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
      ...
    </build>
    

Gostaria de evitar o uso de números de compilação em projetos SNAPSHOT.

Maven fornece a SNAPSHOT palavra-chave para significar um projeto volátil em desenvolvimento ativo. Então, se você faz referência a um projeto com uma versão SNAPSHOT dependência, Maven irá verificar automaticamente se há atualizações e mantenha suas dependências em sincronia.

Se você, em seguida, adicionar um número de compilação para o final dessa versão, você terá que atualizar manualmente as dependências, assim você perder qualquer benefício de ter o sufixo SNAPSHOT.

Eu, pessoalmente, evitar o uso de números de compilação sempre que possível de qualquer maneira. Se eu tiver que atualizar um projeto, eu apenas bater o número da versão, ou usar um sufixo como beta-2 ou RC2. Se você precisa controlar a revisão na SNAPSHOT, eu recomendo adicionando-o ao Manifesto para que possa verificar onde a construção originou, mas usar o sufixo SNAPSHOT padrão para permitir Maven para resolver as versões normalmente. A configuração abaixo mostra como adicionar a revisão para o manifesto.

No que diz respeito a sua configuração está em causa, parece OK para mim assumindo que o seu url SCM está configurado corretamente. Se você não tem nenhuma configuração de SCM em sua POM que pode ser o problema.

Você pode correr com -X e verificar se há qualquer saída do plug-in indicando por isso que não está definindo a propriedade?

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>buildnumber-maven-plugin</artifactId>
  <version>0.9.4</version>
  <executions>
    <execution>
      <id>useLastCommittedRevision</id>
      <phase>validate</phase>
      <goals>
        <goal>create</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
      <manifestEntries>
        <Implementation-Build>${buildNumber}</Implementation-Build>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

Outras dicas

Adicione esta após a buildnumber-maven-plugin:

<plugin>
    <groupId>io.github.michaldo</groupId>
    <artifactId>nashorn-maven-plugin</artifactId>
    <version>0.0.1</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>eval</goal>
            </goals>
            <configuration>
                <script>
                    $project.artifact.version = "${buildNumber}";
                </script>
            </configuration>
        </execution>
    </executions>
</plugin>

E o buildNumber será reconhecido pela embalagem e implantar.

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