2012-05-07 11 views
172

Questo è uno snippet del mio file pom.Maven: Che cos'è pluginManagement?

.... 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.4</version>       
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          ...... 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
... 

Io lo uso con successo con il comando

mvn install 

Ma, quando cerco di racchiuderlo nel tag "pluginManagement", i maven-dependency-plugin smette di funzionare quando lancio l'obiettivo install. Perché il tag "pluginManagement" modifica il comportamento della build? O dovrei usare un altro obiettivo o opzione?

risposta

222

Hai ancora bisogno di aggiungere

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
    </plugin> 
</plugins> 

in costruzione, perché pluginManagement è solo un modo per condividere la stessa configurazione del plugin su tutti i moduli del tuo progetto.

Da documentazione Maven:

pluginManagement: è un elemento che si vede lungo plugin laterali. La gestione dei plug-in contiene elementi di plug-in allo stesso modo, ad eccezione del fatto che piuttosto che configurare le informazioni sui plugin per questa particolare build di progetto, è inteso per configurare le build di progetto che ereditano da questa. Tuttavia, questo configura solo i plugin che sono effettivamente referenziati all'interno dell'elemento plugins nei bambini. I bambini hanno tutto il diritto di ignorare le definizioni di pluginManagement.

3

pluginGestione: è un elemento che viene visualizzato lungo i plugin laterali. La gestione dei plug-in contiene elementi di plug-in allo stesso modo, ad eccezione del fatto che piuttosto che configurare le informazioni sui plugin per questa particolare build di progetto, è inteso per configurare le build di progetto che ereditano da questa. Tuttavia, questo configura solo i plugin che sono effettivamente referenziati all'interno dell'elemento plugins nei bambini. I bambini hanno tutto il diritto di ignorare le definizioni di pluginManagement.

Da http://maven.apache.org/pom.html#Plugin%5FManagement

copiato da:

Maven2 - problem with pluginManagement and parent-child relationship

26

È possibile utilizzare pluginManagement in un padre padre per configurarlo nel caso in cui un altro bambino voglia usarlo, ma non tutti i plug-in figlio vogliono utilizzarlo. Un esempio può essere che il tuo super pom definisce alcune opzioni per il plugin Javadoc maven. Non tutti i pom per bambini potrebbero voler usare Javadoc, quindi definisci i valori di default in una sezione pluginManagement. Il fan del bambino che vuole usare il plugin Javadoc, definisce semplicemente una sezione plugin e erediterà la configurazione dalla definizione pluginManagement nel padre genitore.

+0

Grazie. Sto solo cercando di mixare i tag pluginManagement e plugin sullo stesso file pom perché devo bypassare un piccolo bug del plugin M2E per Eclipse. Vedere http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

168

La differenza tra <pluginManagement/> e <plugins/> è che:

  • <pluginManagement/> definisce le impostazioni per i plugin che verranno ereditati dai moduli nella vostra build. Questo è ottimo per i casi in cui hai un file pom padre.

  • <plugins/> è un'effettiva invocazione del plug-in. Può o non può essere ereditato da un <pluginManagement/>.

Non è necessario disporre di un <pluginManagement/> nel progetto, se non è un POM genitore. Tuttavia, se si tratta di un pom genitore, poi nel pom del bambino, è necessario disporre di una dichiarazione del tipo:

<plugins> 
    <plugin> 
     <groupId>com.foo</groupId> 
     <artifactId>bar-plugin</artifactId> 
    </plugin> 
</plugins> 

Notate come non sta definendo alcuna configurazione. È possibile ereditarlo dal genitore, a meno che non sia necessario modificare ulteriormente l'invocazione secondo le esigenze del progetto figlio.

Per informazioni più specifiche, è possibile controllare:

  • The Maven pom.xml di riferimento: Plugin

  • Il riferimento Maven pom.xml: Plugin di gestione

+0

Grazie per la risposta. Ho bisogno di mescolare il pluginManagement e il tag plugin (per il plugin maven-dependency-plugin) sullo stesso file pom, perché ho bisogno di bypassare un piccolo bug del plugin IDE di EcEse M2E. Vedi http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

+7

Grazie! :) È lo stesso per '' e ''. Definite le dipendenze (insieme alle loro versioni e ambiti, se volete) nella sezione '' e poi nella sezione '' definite semplicemente 'groupId' e' artifactId'. – carlspring

+0

se devo eseguire un plugin due volte, dovrei usare pluginmanagement? –

Problemi correlati