2012-10-02 14 views
7

Sto usando l'elemento pluginManagement nel mio genitore pom.xml per configurare i plugin per tutti i suoi figli. Ad esempio, ho la seguente configurazione:Plugin MavenGestione di configurazione dell'ereditarietà comportamento strano

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-artifacts</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>some/where/else</outputDirectory> 
        <resources> 
         <resource> 
          <directory>some/another/resource</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

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

La documentazione ufficiale afferma che un plugin configurato in pluginManagement deve ancora essere aggiunto a plugins elemento nei bambini pon. In effetti, se tolgo questo dal pom bambino:

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

poi maven-dependency-plugin fermate la cottura a install fase. Tuttavia, sembra che non influenzi altri plugin, ovvero maven-resource-plugin. Anche se non ho

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

nel mio pom bambino, il suo obiettivo copy-resources spara ancora in fase di install e svolge il lavoro che è configurato per fare.

Perché questo comportamento è presente? C'è una lista di plugin che vengono ereditati sempre, o forse mi manca qualcosa?

+2

Dai un'occhiata al pom efficace per analizzare i tuoi problemi (tramite mvn help: efficace-pom). – khmarbaise

+0

Grazie, te ne sei completamente dimenticato. Dare un'occhiata. –

risposta

6

L'intera POM non è visibile; ma dato il comportamento che stai descrivendo, questo è un vaso, una guerra o un orecchio, giusto? Il plug-in della risorsa è definito per questi tipi di pacchettizzazione per impostazione predefinita. Include un'esecuzione che copia le risorse (come descritto da @maba).

Poiché la definizione del plug-in è inclusa nel POM figlio (anche se NON l'hai inserita direttamente lì), Maven unisce l'esecuzione definita nella sezione <pluginManagement> con l'esecuzione fornita da Maven.

C'è documentation che descrive i collegamenti del ciclo di vita predefinito per tipo di imballaggio. Nota il plugin dependency non è menzionato; ma resources è; è per questo che osservi la differenza. L'esecuzione con -X mostrerà le esecuzioni del plugin.

+0

Sì, la mia confezione pom è un barattolo. Quindi, poiché 'resources-plugin' è incluso automaticamente, eredita automaticamente tutte le configurazioni da' pluginManagement', giusto? Poi, penso, ho trovato la risposta. Pensavo che fosse qualcosa del genere. Grazie mille! –

+1

@VladimirMatveev Sì, ci sono altri plugin che sono inclusi di default. Uno ovvio è 'maven-compiler-plugin'. – maba

+1

@VladimirMatveev Immagino che tu possa trovare i plugin di base qui: [Maven Available Plugins] (http://maven.apache.org/plugins/index.html). – maba

1

Maven copia sempre le risorse che si trovano all'interno di src/main/resources per impostazione predefinita.

Da Maven Getting Started Guide:

La semplice regola impiegato da Maven è questo: qualsiasi directory o file collocati all'interno della directory ${basedir}/src/main/resources sono confezionati nel vaso con la stessa struttura di partenza alla base del JAR.

+0

Conosco 'src/main/resources', ma la mia configurazione (forse non avrei dovuto sostituirla con puntini di sospensione, ho pensato che è inutile spreco di spazio) copia diversi file in posizioni diverse, ed è questo che funziona nonostante il plugin venga rimosso dal figlio pom. Ho aggiornato la mia domanda al riguardo. –