NOTA:
Esta resposta se aplica apenas ao Maven 2! As mencionadas LATEST
e RELEASE
metaversões foram descartadas no Maven 3 "por uma questão de construções reproduzíveis" , há mais de 6 anos. Consulte esta solução compatível com Maven 3 .
Se você sempre deseja usar a versão mais recente, o Maven possui duas palavras-chave que podem ser usadas como alternativa aos intervalos de versão. Você deve usar essas opções com cuidado, pois não está mais no controle dos plugins / dependências que está usando.
Quando você depende de um plug-in ou de uma dependência, pode usar o valor de uma versão de LATEST ou RELEASE. LATEST refere-se à versão mais recente lançada ou de captura instantânea de um artefato específico, o artefato implementado mais recentemente em um repositório específico. RELEASE refere-se à última versão não instantânea no repositório. Em geral, não é uma prática recomendada projetar software que dependa de uma versão não específica de um artefato. Se você estiver desenvolvendo software, convém usar RELEASE ou LATEST como uma conveniência para não precisar atualizar os números de versão quando uma nova versão de uma biblioteca de terceiros for lançada. Ao liberar o software, você deve sempre garantir que seu projeto dependa de versões específicas para reduzir as chances de sua compilação ou seu projeto serem afetados por uma liberação de software que não esteja sob seu controle.
Consulte a seção POM Syntax do livro Maven para obter mais detalhes. Ou consulte este documento em intervalos de versão de dependência , onde:
- Um colchete (
[
& ]
) significa "fechado" (inclusive).
- Um parêntese (
(
& )
) significa "aberto" (exclusivo).
Aqui está um exemplo que ilustra as várias opções. No repositório do Maven, com.foo:my-foo possui os seguintes metadados:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Se for necessária uma dependência desse artefato, você terá as seguintes opções ( é claro que outros intervalos de versão podem ser especificados, apenas mostrando os relevantes aqui):
Declare uma versão exata (sempre será resolvida para 1.0.1):
<version>[1.0.1]</version>
Declare uma versão explícita (sempre resolverá a 1.0.1, a menos que ocorra uma colisão, quando o Maven selecionar uma versão correspondente):
<version>1.0.1</version>
Declare um intervalo de versão para todos os 1.x (atualmente resolverá para 1.1.1):
<version>[1.0.0,2.0.0)</version>
Declare um intervalo de versão em aberto (será resolvido para 2.0.0):
<version>[1.0.0,)</version>
Declare a versão como ÚLTIMA (será resolvida para 2.0.0) (removida do maven 3.x)
<version>LATEST</version>
Declare a versão como RELEASE (será resolvida para 1.1.1) (removida do maven 3.x):
<version>RELEASE</version>
Observe que, por padrão, suas próprias implantações atualizarão a entrada "mais recente" nos metadados do Maven, mas para atualizar a entrada "release", é necessário ativar o "perfil de liberação" do super POM do Maven . Você pode fazer isso com "-Prelease-profile" ou "-DperformRelease = true"
Vale ressaltar que qualquer abordagem que permita ao Maven escolher as versões de dependência (LATEST, RELEASE e intervalos de versão) pode deixá-lo aberto para criar problemas de tempo, pois versões posteriores podem ter um comportamento diferente (por exemplo, o plug-in de dependência alterou anteriormente o padrão valor de verdadeiro a falso, com resultados confusos).
Portanto, geralmente é uma boa ideia definir versões exatas nos lançamentos. Como a resposta de Tim aponta, o maven-version-plugin é uma ferramenta útil para atualizar as versões de dependência, particularmente as versões: use-latest-versions e versions: use-latest-releases goals.