Che cos'è pluginManagement in pom.xml di Maven?


266

Questo è uno snippet del mio file pom.

....
        <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>
...

Lo uso con successo con il comando

mvn install

Ma quando provo a racchiuderlo nel tag "pluginManagement", maven-dependency-pluginsmette di funzionare quando lancio l' installobiettivo. Perché il tag "pluginManagement" cambia il comportamento di compilazione? O dovrei usare un altro obiettivo o opzione?

Risposte:


299

Devi ancora aggiungere

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

nella tua build, perché pluginManagementè solo un modo per condividere la stessa configurazione di plugin su tutti i moduli del tuo progetto.

Dalla documentazione di Maven:

pluginManagement : è un elemento che si vede lungo i plugin laterali. La gestione dei plug-in contiene gli elementi dei plug-in più o meno allo stesso modo, tranne per il fatto che anziché configurare le informazioni sui plug-in per questo particolare progetto, è destinato a configurare i progetti che ereditano da questo. Tuttavia, questo configura solo i plug-in a cui si fa effettivamente riferimento all'interno dell'elemento plug-in nei figli. I bambini hanno tutto il diritto di ignorare le definizioni di gestione dei plugin.


266

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

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

  • <plugins/>è una vera chiamata al plugin. Può o non può essere ereditato da a <pluginManagement/>.

Non hai bisogno di avere un <pluginManagement/>nel tuo progetto, se non è un POM principale. Tuttavia, se si tratta di un genitore, quindi nel pom del bambino, devi avere una dichiarazione come:

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

Nota come non stai definendo alcuna configurazione. È possibile ereditare dal genitore, a meno che non sia necessario adattare ulteriormente la propria chiamata secondo le esigenze del progetto figlio.

Per informazioni più specifiche, puoi controllare:


Grazie per la risposta. Devo mescolare il plugin pluginManagement e il tag plugin (per il plugin maven-dependency) sullo stesso file pom, perché devo bypassare un piccolo bug del plugin IDE M2E Eclipse. Vedi stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti

7
Grazie! :) Questo è lo stesso per <dependency/>e <dependencyManagement/>. Definisci le dipendenze (insieme alle loro versioni e ambiti, se vuoi) nella <dependencyManagement/>sezione e poi nella <dependencies/>sezione hai appena definito il groupIde artifactId.
carlspring,

1
se devo eseguire un plugin due volte, dovrei usare pluginmanagement?
Kalpesh Soni,

@KalpeshSoni: dipende - potresti voler avere una configurazione comune tra le due esecuzioni che non vuoi ridefinire.
Carlspring,

39

Si utilizza pluginManagementin a parent pomper configurarlo nel caso in cui qualcuno child pomvoglia usarlo, ma non tutti i plug-in figlio vogliono usarlo. Un esempio può essere che tu super pomdefinisca alcune opzioni per il plugin Javadoc di Maven.

Non tutti child pompotrebbero voler utilizzare Javadoc, quindi si definiscono i valori predefiniti in una pluginManagementsezione. Il figlio pom che desidera utilizzare il plug-in Javadoc, definisce semplicemente una sezione del plug-in e erediterà la configurazione dalla pluginManagementdefinizione nel file parent pom.


Grazie. Sto solo cercando di mescolare i plugin pluginManagement e plugin sullo stesso file pom perché devo bypassare un piccolo bug del plugin M2E per Eclipse. Vedi lo stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti

3

pluginManagement: è un elemento che si vede lungo i plugin laterali. La gestione dei plug-in contiene elementi del plug-in più o meno allo stesso modo, tranne per il fatto che, anziché configurare le informazioni sui plug-in per questo particolare progetto, si intende configurare build del progetto che ereditano da questo. Tuttavia, questo configura solo i plug-in che fanno effettivamente riferimento all'interno dell'elemento plug-in nei figli. I bambini hanno tutto il diritto di scavalcare le definizioni di gestione dei plugin.

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

Copiato da:

Maven2 - problema con pluginManagement e relazione genitore-figlio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.