2013-05-22 5 views
5

(usando Maven 3.0.3 su Mac con Java 7)In che modo Maven determina quale versione del plug-in utilizzare per i plug-in utilizzati dalla riga di comando?

Quando eseguo mvn dependency:analyze-duplicate Maven utilizza la versione 2.1 (non importa se 2.8 è disponibile nel mio repo locale o meno) del plugin e si lamenta:

[ERROR] Could not find goal 'analyze-duplicate' in plugin org.apache.maven.plugins:maven-dependency-plugin:2.1 among available goals unpack-dependencies,.... 

Quando lo eseguo come mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:analyze funziona correttamente.

Mi sarei presumibile che, sempre, la versione più recente (anche se non ancora nel repository locale) ricade nella versione più recente, se nessuna versione è esplicitamente specificata?

Cosa mi manca? Grazie a tutti per il vostro tempo di risposta.

+0

hai risolto questo? Molto interessato a risolvere questo problema esatto per gli stessi motivi – Ittai

risposta

7

Per alcuni plugin Apache Maven ha definito una versione predefinita nell'unico e solo super -pom, che può essere aggiornato con una versione più recente di Maven. Vedere il tronco corrente: https://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob_plain;f=maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml

<pluginManagement> 
    <!-- NOTE: These plugins will be removed from future versions of the super POM --> 
    <!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) --> 
    <plugins> 
    <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.3</version> 
    </plugin> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2-beta-5</version> 
    </plugin> 
    <plugin> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.8</version> 
    </plugin> 
    <plugin> 
     <artifactId>maven-release-plugin</artifactId> 
     <version>2.3.2</version> 
    </plugin> 
    </plugins> 
</pluginManagement> 

In Maven-3.1 sia l'esperto di dipendenza-plugin e maven-release-plugin sono stati aggiornati. Le versioni precedenti utilizzavano ancora 2.1 e 2.0 (nello stesso ordine).

Quindi questi sono i valori predefiniti se non si specifica una versione nel proprio pom.xml o se non si dispone di uno.

Per vedere il pom efficace, eseguire mvn org.apache.maven.plugins:maven-help-plugin:2.2:effective-pom o help:effective-pom, ma poi si fa riferimento (di nuovo) alla versione nel super-pom.

+0

grazie! sto eseguendo utente Maven 3.0.5 e ho ancora avuto quel problema. Qualche idea su dove posso guardare la "mia" copia del super pom? per chiarire il mistero – Ittai

+1

https://jira.codehaus.org/browse/MNG-5400, quindi mi sbagliavo con la versione di Maven. L'ho spinto a 2.5, Herve a 2.8 un po 'più tardi, vedi https://git-wip-us.apache.org/repos/asf?p=maven.git;a=history;f=maven-model-builder/ src/main/resources/org/apache/maven/model/pom-4.0.0.xml; h = e8b42d87a082bd52d80f438d3b36cf424513a55b; hb = 9404499ccdf27f6505ba4538130168c411f41eea. Quindi sì, Maven 3.0.5 punta ancora a m-dependency-2.1 –

+0

+1 questo è probabilmente il motivo del comportamento – FrVaBe

3

Il processo di risoluzione di una versione di plugin è descritto here.

Insomma Maven userà la prima versione trovata da queste regole in questo ordine:

  • versione definita nella POM del progetto
  • versione definita nel Registro di sistema plug-in (se abilitato)
  • ultima versione metadati
  • versione
  • STAMPA metadati

Quindi uno sguardo nel progetto POM (POM o genitore) se hai specificato una versione per questo plugin lì.

Aggiornamento: Per quanto riguarda il tuo problema è la ragione, che la versione Maven-dipendenza-plugin 2.1 è specificato nella sezione pluginManagement del Maven Super POM. Il tuo progetto eredita queste impostazioni e quindi la versione 2.1 è usata di default (rispetta la risposta di @Robert Scholte che lo ha sottolineato per primo!)

+0

Grazie per la risposta. Il problema è che eseguendo il tuo help-comando si dice 'Nome: Maven Dependency Plugin ... Versione: 2.8' - ma eseguendolo senza una versione menzionata ancora eseguita versione 2.1 - lo scarica anche se mancante. E ho anche controllato il file pom. Non contiene affatto un riferimento a questo plugin. Quindi la mia domanda non ha ancora ricevuto una risposta completa. Forse potresti aiutarmi a capire dove trovare i metadati di versione ULTIMI e RILASCIO per un plugin specifico? Soprattutto per il plugin di dipendenza. - Forse questo è il problema che sto affrontando? –

+0

Verificare http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin Suppongo che tutte le versioni fino a 2.7 siano correttamente contrassegnate come release. È sufficiente attivare i "metadati della versione RELEASE"? –

+0

@Tom Fink Hai una dichiarazione nel tuo pom? – FrVaBe

Problemi correlati