Eu tenho dois projetos: Projeto pai: A, Subprojeto: B
A / pom.xml:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
E em B / pom.xml, tenho:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
Quero que B herde a versão do pai, então o único lugar no meu caso que preciso colocar 0.1-SNAPSHOT
é A/pom.xml
. Mas se eu remover a <version>0.1-SNAPSHOT</version>
partir B/pom.xml
sob a seção pai, perito reclama a versão que falta para o pai.
Existe uma maneira que eu possa simplesmente usar ${project.version}
ou algo assim para evitar ter os 01.-SNAPSHOT
dois peitos?
inheritance
maven
Shengjie
fonte
fonte
Respostas:
EDIT: Desde o Maven 3.5.0, existe uma boa solução para isso usando
${revision}
espaço reservado. Veja a resposta de FrVaBe para detalhes. Para versões anteriores do Maven, veja minha resposta original abaixo.Não, não existe. Você sempre precisa especificar a versão dos pais. Felizmente, é herdada como versão do módulo o que é desejável na maioria dos casos. Além disso, a declaração da versão dos pais é enviada automaticamente pelo Maven Release Plugin, portanto, na verdade, não é um problema que você tenha a versão em dois locais, desde que você use o Maven Release Plugin para liberar ou apenas liberar versões.
Observe que existem alguns casos em que esse comportamento é realmente bom e oferece mais flexibilidade que você pode precisar. Às vezes, você deseja usar parte da versão do pai anterior para herdar, no entanto, esse não é um caso comum.
fonte
${revision}
espaço reservado para isso. Veja a minha resposta ;-)O Maven não foi projetado para funcionar dessa maneira, mas existe uma solução alternativa para atingir esse objetivo (talvez com efeitos colaterais, você precisará tentar). O truque é dizer ao projeto filho para encontrar seu pai através de seu caminho relativo, em vez de suas coordenadas puras, além de externalizar o número da versão em uma propriedade:
Pom pai
Pom criança
Eu usei esse truque por um tempo em um dos meus projetos, sem nenhum problema específico, exceto pelo fato de o maven registrar muitos avisos no início da construção, o que não é muito elegante.
EDITAR
Parece que o maven 3.0.4 não permite mais essa configuração.
fonte
'version' contains an expression but should be a constant.
A maneira mais fácil de atualizar as versões IMO:
(faça isso na sua pasta pom raiz / pai).
Suas POMs são analisadas e você pergunta qual versão definir.
fonte
mvn versions:update-child-modules
contrário , toda a versão pom do módulo filho será ignorada.Desde o Maven 3.5.0, você pode usar o
${revision}
espaço reservado para isso. O uso está documentado aqui: Versões amigáveis do Maven CI .Em suma, o pom pai se parece com isso (citado na documentação do Apache):
e a criança pom assim
Você também precisa usar o Flatten Maven Plugin para gerar documentos pom com o número de versão dedicado incluído para implantação. O HowTo está documentado na documentação vinculada.
Também @khmarbaise escreveu um ótimo post sobre esse recurso: Maven: Arquivos POM sem uma versão nele ?
fonte
${revision}
no pom (no repositório maven) como dependência em outro projeto. Eu não acho que isso vai funcionar.${revision}
a tag da versão pela nova versãoComo Yanflea mencionou, há uma maneira de contornar isso.
No Maven 3.5.0, você pode usar a seguinte maneira de transferir a versão para baixo do projeto pai:
POM.xml pai
Módulo POM.xml
Você pode mudar
myversion
para o que quiser, que não seja uma propriedade reservada.fonte
Você também pode usar:
para atualizar os números de versão em seus POMs.
fonte
A resposta do eFox funcionou para um único projeto, mas não quando eu estava referenciando um módulo de outro (o pom.xml ainda estava armazenado no meu
.m2
com a propriedade em vez da versão).No entanto, funciona se você combiná-lo com o
flatten-maven-plugin
, pois gera os poms com a versão correta, não a propriedade.A única opção que eu mudei na definição de plug-in é a
outputDirectory
, ela está vazia por padrão, mas eu prefiro tê-latarget
, que é definida na minha.gitignore
configuração:A configuração do plug-in está no pom.xml pai
fonte
Use
mvn -N versions:update-child-modules
para atualizar a versão do child pomhttps://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html
fonte
Você quer dizer que deseja remover a versão do bloco pai do pom de B, acho que não pode fazê-lo; groupId, artifactId e version especificaram as coordenadas pom do pai, o que você pode omitir é a versão infantil.
fonte