Estou usando o maven 3.0.4 e gostaria de tornar o carimbo de data / hora de construção acessível ao meu aplicativo. Para isso, estou colocando um espaço reservado em um .properties
arquivo e vou deixar o maven filtrar na compilação. Embora esteja funcionando bem para ${project.version}
, ${maven.build.timestamp}
não é substituído na filtragem.
A propriedade parece estar disponível na construção - posso usá-la para modificar o nome do artefato:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Então, por que ele não está disponível para filtragem de recursos? E, mais importante, como faço para torná-lo acessível?
target/${project}
pasta, mas na minha configuração atual o Tomcat não está usando esta pasta ...maven.build.timestamp.format
várias vezes?${timestamp}
pela string literal${maven.build.timestamp}
.buildTimestamp=@timestamp@
Posso confirmar que o Maven 3.x
{maven.build.timestamp}
está "funcionando" agora. Eles contornaram o problema, aparentemente. Nenhumaproperties
solução alternativa adicional necessária.No entanto, tome cuidado com o plugin de "filtragem" (maven-resources-plugin) atualizado. Ele precisa ser relativamente novo, então se
mvn help:effective-pom
mostrar uma versão antiga (ex: 2.6), coloque algo mais novo, conserte para mim, 3.x ex:<properties><timestamp>...
a solução alternativa não é mais necessária ...Isso também esclareceu, mais ou menos, por que estava funcionando no IntelliJ, mas não na linha de comando. O IntelliJ provavelmente usa suas próprias constantes do maven "modificadas / internas", então estava funcionando lá, mas não na linha de comando do maven.
Observe também que se você adicionar um diretório de recursos de filtragem ao seu pom, pode ser necessário "adicionar novamente" o diretório padrão, ele se perde, por exemplo:
NB se você estiver usando uma bota de primavera como seu pai, você deve usar @ maven.build.timestamp @ em seu lugar . Observe também que se você estiver usando o spring boot, há um arquivo
META-INF/build-info.properties
que é criado opcionalmente pelospring-boot-maven-plugin
que você pode ler (o spring fornece umBuildProperties
bean para facilitar a leitura).fonte
<webResources><resource><filtering>
) :-( consulte MWAR-415 -> então ainda tenho que usar a solução alternativa lá<properties><timestamp>...
solução alternativa. Veja também issues.apache.org/jira/browse/MASSEMBLY-603Com o intuito de enriquecer o conteúdo do Stackoverflow para outras pessoas, que como eu, encontrei este post como forma de resolver o "problema" da
${maven.build.timestamp}
. Este não é um bug maven, mas um comportamento esperado de m2e, como pode ser visto neste post .Portanto, acredito que não podemos esperar que a solução seja “corrigida”, pois, pelo que entendi, a correção envolve questões conceituais.
No meu caso, o que fiz foi usar o plugin (
buildnumber-maven-plugin
) conforme descrito neste outro post .fonte
buildnumber-maven-plugin
que tenho problemas semelhantes, nomeadamente que a variável que gera só está disponível em determinados contextos, NÃO filtragem. Você pode ou não ser capaz de superar isso mexendo na fase de execução ou nas metas, mas a solução integrada parece muito mais simples.Adicionar propriedades Maven no nível do projeto pom não leva em consideração o fuso horário local correto, portanto, o carimbo de data / hora pode parecer errado:
O uso do build-helper-maven-plugin aplica o fuso horário correto e o horário de verão atual ao carimbo de data / hora:
Ao empacotar, o Maven substituirá qualquer carimbo de data / hora do token na pasta / resources, por exemplo, resources / version.properties:
build.timestamp = $ {timestamp}
Você pode então carregar esse arquivo de propriedades em seu aplicativo.
fonte