Qual é a maneira mais simples de recuperar o número da versão do pom.xml do maven no código, ou seja, programaticamente?
Supondo que você esteja usando Java, você pode
Crie um .properties
arquivo (geralmente) no seu src/main/resources
diretório (mas na etapa 4 você pode pedir para procurar em outro lugar).
Defina o valor de alguma propriedade em seu .properties
arquivo usando a propriedade Maven padrão para a versão do projeto: foo.bar=${project.version}
No seu código Java, carregue o valor do arquivo de propriedades como um recurso do caminho de classe (google para obter exemplos abundantes de como fazer isso, mas aqui está um exemplo para iniciantes ).
No Maven, ative a filtragem de recursos - isso fará com que o Maven copie esse arquivo em suas classes de saída e traduza o recurso durante essa cópia, interpretando a propriedade. Você pode encontrar algumas informações aqui, mas na maioria das vezes você faz isso em seu pom:
<build> <recursos> <resource> <directory> src / main / resources </directory> <filtering> true </filtering> </resource> </resources> </build>
Você também pode obter outras propriedades padrão project.name
, como , project.description
ou mesmo propriedades arbitrárias que você coloca no seu pom <properties>
, etc. Quando você especifica um perfil em tempo de execução com -PmyProfile
, isso pode ativar propriedades que podem aparecer na sua construção.
src/main/resources
, pois isso pode processar todos os arquivos localizados neste diretório, incluindo arquivos de binários. Para evitar comportamentos imprevisíveis, é melhor fazer a filtragem em umsrc/main/resources-filtered
diretório, conforme sugerido aqui . De qualquer forma, obrigado por este belo truque!A resposta aceita pode ser a melhor e mais estável maneira de obter um número de versão em um aplicativo estaticamente , mas na verdade não responde à pergunta original: Como recuperar o número da versão do artefato do pom.xml? Portanto, quero oferecer uma alternativa mostrando como fazê-lo dinamicamente durante o tempo de execução:
Você pode usar o próprio Maven. Para ser mais exato, você pode usar uma biblioteca Maven.
E então faça algo parecido com isto em Java:
O log do console é o seguinte:
Atualização 2017-10-31: Para responder à pergunta de acompanhamento de Simon Sobisch, modifiquei o exemplo da seguinte maneira:
fonte
package
d jar normal (as classes de dependência não estão integradas) e não funciona quando compactado com o maven-assembly-pluginjar-with-dependencies
que recebo ajava.io.FileNotFoundException: pom.xml
(está no jarro final comoMETA-INF/maven/my.package/myapp/pom.xml
) - alguma dica de como resolver isso?Os artefatos empacotados contêm um
META-INF/maven/${groupId}/${artifactId}/pom.properties
arquivo cujo conteúdo se parece com:Muitos aplicativos usam esse arquivo para ler a versão do aplicativo / jar em tempo de execução; não é necessária nenhuma configuração.
O único problema com a abordagem acima é que esse arquivo é (atualmente) gerado durante a
package
fase e, portanto, não estará presente durante os testes, etc. (existe um problema no Jira para alterar isso, consulte MJAR-76 ). Se esse é um problema para você, a abordagem descrita por Alex é o caminho a seguir.fonte
Há também o método descrito em Maneira fácil de exibir o número da versão do seu aplicativo usando o Maven :
Adicione isso ao pom.xml
Então use isto:
Eu achei esse método mais simples.
fonte
getImplementationVersion()
eranull
. (versão maven 3.0.4).war
artefatos, lembre-se de usar emmaven-war-plugin
vez demaven-jar-plugin
getImplementationVersion()
retorna nulo).Se você usar pacotes mvn como jar ou war, use:
Ele lê uma propriedade "Implementation-Version" do META-INF / MANIFEST.MF gerado (definido como a versão do pom.xml) no arquivo morto.
fonte
Para complementar o que a @kieste postou, acho que é a melhor maneira de o Maven criar informações disponíveis no seu código se você estiver usando o Spring-boot: a documentação em http://docs.spring.io/spring-boot/ docs / current / reference / htmlsingle / # production-ready-application-info é muito útil.
Você só precisa ativar os atuadores e adicionar as propriedades necessárias em seu
application.properties
ouapplication.yml
fonte
Use esta biblioteca para facilitar uma solução simples. Adicione ao manifesto o que você precisar e, em seguida, consulte por string.
http://manifests.jcabi.com/index.html
fonte
Às vezes, a linha de comando do Maven é suficiente ao criar scripts para algo relacionado à versão do projeto, por exemplo, para recuperação de artefato via URL de um repositório:
Exemplo de uso:
fonte
Obter versão usando
this.getClass().getPackage().getImplementationVersion()
PS Não se esqueça de adicionar:
fonte
Com referência à resposta de ketankk :
Infelizmente, adicionar isso interferiu na maneira como meu aplicativo lida com recursos:
Mas usar esta tag <manifest> do maven-assemble-plugin fez o truque:
Então eu pude obter a versão usando
fonte