Por que o plug -in de liberação do MAVEN permite a versão de instantâneo no gerenciamento de dependência?
-
21-09-2019 - |
Pergunta
Temos 1 empresa pai POM. Isso usa a DependencyManagement para gerenciar as versões para todas as dependências de todos os artefatos utilizados.
O que é alarmante é que as versões instantâneas podem ser definidas no dependência do gerenciamento. Embora quando a liberação do Maven é executada, o POM pode ser lançado com a versão instantânea no DependencyManagement. Por quê?
Se eu apontar um projeto infantil para uma versão lançada da empresa POM POM, e este projeto infantil usa uma dependência definida no DependencyManagement, embora seja uma versão instantânea, não consigo lançar o projeto Child.
Por que o MAVEN permite que a versão instantânea para um artefato definido no DependencyManagement seja lançado? E como posso configurar o plugin de liberação do Maven para falhar se houver uma versão instantânea definida?
Solução
O que é alarmante é que as versões instantâneas podem ser definidas no dependência do gerenciamento. Embora quando a liberação do Maven é executada, o POM pode ser lançado com a versão instantânea no DependencyManagement. Por quê?
Eu esperaria o plugina-liberação do maven Para atualizar versões de instantâneo em dependencyManagement
após a liberação. Na verdade, há alguma jira sobre isso, por exemplo Mrelease-91 e Mrelease-202 Isso pode afetar você.
Portanto, a pergunta é: qual versão do plug -in você está usando?
Mas, para ser sincero, não está muito claro quais versões são afetadas por Mrelease-202, os comentários são confusos (então eu me pergunto se o problema é corrigido ou não). De qualquer forma, se a versão que você está usando for afetada, atualize para uma versão mais recente. E se o bug/regressão (acho que é um bug) ainda estiver lá, levante um novo problema.
Outras dicas
Não tenho a resposta sobre 'por que' (pessoalmente acho que é um bug), mas tenho uma maneira de impedir que isso aconteça: use o plug -in do Maven.
Uma empresa chamada Smartics (minúsculas s) criaram uma regra (NosnaPShotDependências Independência do ManagementRule) para evitar esse problema exato.
Você basicamente precisa adicionar o seguinte ao seu pai POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-project-rules</id>
<phase>test</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<NoSnapshotDependenciesInDependencyManagementRule
implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule">
<onlyWhenRelease>true</onlyWhenRelease>
<checkOnlyResolvedDependencies>false</checkOnlyResolvedDependencies>
</NoSnapshotDependenciesInDependencyManagementRule>
</rules>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>de.smartics.rules</groupId>
<artifactId>smartics-enforcer-rules</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>