Question

Nous avons 1 société pom-mère. Celui-ci utilise dependencyManagement pour gérer les versions pour toutes les dépendances de tous les objets utilisés.

Ce qui est inquiétant, est que les versions SNAPSHOT peuvent être définies dans dependencyManagement. Bien que lorsque la libération de Maven est effectuée, la pom est autorisé à être libéré avec la version SNAPSHOT dans dependencyManagement. Pourquoi?

Si je signale un projet d'enfant à une version publiée de la pom-mère de l'entreprise, et ce projet d'enfant utilise une dépendance définie dans dependencyManagement si elle est une version snapshot, je suis incapable de libérer le projet enfant.

Pourquoi Maven permet version snapshot pour un artefact défini dans dependencyManagement être libéré? Et comment puis-je configurer le plugin version Maven à l'échec s'il existe une version SNAPSHOT définie?

Était-ce utile?

La solution

  

Ce qui est inquiétant, est que les versions SNAPSHOT peuvent être définies dans dependencyManagement. Bien que lorsque la libération de Maven est effectuée, la pom est autorisé à être libéré avec la version SNAPSHOT dans dependencyManagement. Pourquoi?

Je me attends à la maven-release-plugin pour mettre à jour INSTANTANÉ versions dependencyManagement lors de la libération. En fait, il y a quelques Jira à ce sujet, par exemple MRELEASE-91 et MRELEASE-202 qui peuvent vous affecter.

La question est: quelle version du plugin que vous utilisez?

Mais pour être honnête, ce n'est pas vraiment clair quelles versions sont affectées par MRELEASE-202 , les commentaires sont source de confusion (donc je me demande si le problème est résolu ou non). Quoi qu'il en soit, si la version que vous utilisez est affecté, puis mise à niveau vers une version plus récente. Et si le bogue / régression (je pense qu'il est un bug) est toujours là, puis soulever une nouvelle question.

Autres conseils

Je n'ai pas la réponse à « pourquoi » (personnellement, je pense qu'il est un bug), mais j'ai un moyen d'empêcher que cela se produise. Utiliser le plugin Maven Exécuteur

Une compagnie appelée smartics (minuscule s) ont créé une règle ( NoSnapshotDependenciesInDependencyManagementRule ) pour éviter ce problème exact.

Vous avez besoin essentiellement d'ajouter ce qui suit à votre parent 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top