Por que o plug -in de liberação do MAVEN permite a versão de instantâneo no gerenciamento de dependência?

StackOverflow https://stackoverflow.com/questions/2089246

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?

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top