Perché plug rilascio Maven permette per la versione istantanea nel gestione delle dipendenze?
-
21-09-2019 - |
Domanda
Abbiamo 1 capogruppo pom. Questo utilizza dependencyManagement per gestire le versioni per tutte le dipendenze di tutti i manufatti utilizzati.
Quello che è allarmante, è che le versioni di istantanee possono essere definiti in dependencyManagement. Anche se quando si esegue il rilascio Maven, il pom è permesso di essere rilasciato con la versione istantanea nel dependencyManagement. Perché?
Se io punto un progetto figlio a una versione rilasciata del pom capogruppo, e questo progetto bambino utilizza una dipendenza definito dependencyManagement se si tratta di una versione ISTANTANEA, io sono in grado di rilasciare il progetto figlio.
Perché Maven permette versione snapshot per un manufatto definito dependencyManagement per essere rilasciato? E come posso configurare il plugin rilascio Maven a fallire se c'è una versione ISTANTANEA definito?
Soluzione
Quello che è allarmante, è che le versioni di istantanee possono essere definiti in dependencyManagement. Anche se quando si esegue il rilascio Maven, il pom è permesso di essere rilasciato con la versione istantanea nel dependencyManagement. Perché?
mi aspetterei il Maven-release-plugin per aggiornare ISTANTANEA versioni in dependencyManagement
al momento del rilascio. In realtà, ci sono alcuni Jira su questo, per esempio MRELEASE-91 e MRELEASE-202 che possono influenzare voi.
Quindi la domanda è: quale versione del plugin stai usando?
Ma ad essere onesti, non è davvero chiaro quali versioni sono affetti da MRELEASE-202 , i commenti sono confuse (così mi chiedo se il problema è stato risolto o meno). In ogni caso, se la versione in uso è interessato, quindi l'aggiornamento a una versione più recente. E se il bug / di regressione (penso che sia un bug) è ancora lì, quindi sollevare una nuova emissione.
Altri suggerimenti
Non ho la risposta da 'perché' (personalmente penso che sia un bug), ma ho un modo per evitare che ciò accada. Utilizzare il plugin Maven Enforcer
Una società chiamata smartics (s minuscola) hanno creato una regola ( NoSnapshotDependenciesInDependencyManagementRule ) per evitare questo problema esatto.
È fondamentalmente bisogno di aggiungere quanto segue al POM genitore:
<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>