2012-10-02 26 views
7

Estoy usando el elemento pluginManagement en mi padre pom.xml para configurar los complementos para todos sus elementos secundarios. Por ejemplo, tengo la siguiente configuración:Maven pluginManagement configuration inheritance strange behavior

<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 documentación oficial establece que un plugin configurado en pluginManagement todavía tiene que ser añadido a plugins elemento en niños poms. De hecho, si quito esto desde pom niño:

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

luego maven-dependency-plugin paradas a disparar contra install fase. Sin embargo, parece que no afecta a algunos otros complementos, a saber, maven-resource-plugin. Incluso si no tengo

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

en mi pom del niño, su objetivo sigue siendo copy-resources incendios en install fase y lleva a cabo el trabajo que está configurado para hacerlo.

¿Por qué está presente este comportamiento? ¿Hay una lista de complementos que se heredan siempre, o tal vez me falta algo?

+2

Eche un vistazo al pom efectivo para analizar sus problemas (a través de mvn help: effective-pom). – khmarbaise

+0

Gracias, lo olvidé por completo. Echaré un vistazo. –

Respuesta

6

Todo el POM no está visible; pero dado el comportamiento que está describiendo, esto es una jarra, guerra o oreja, ¿correcto? El complemento de recursos se define para esos tipos de empaque por defecto. Incluye una ejecución que copia recursos (como lo describe @maba).

Dado que la definición del complemento está incluida en su hijo POM (aunque USTED no lo haya puesto allí directamente), Maven fusiona la ejecución definida en la sección <pluginManagement> con la ejecución proporcionada por Maven.

Hay documentation que describe los enlaces de ciclo de vida predeterminados por tipo de paquete. Tenga en cuenta que el complemento dependency no se menciona; pero resources es; es por eso que observas la diferencia. Correr con -X mostrará las ejecuciones del complemento.

+0

Sí, mi paquete de pom es jar. Entonces, es porque 'resources-plugin' se incluye automáticamente, también hereda automáticamente toda la configuración de' pluginManagement', ¿verdad? Entonces, creo, encontré la respuesta. Pensé que era algo como esto. ¡Muchas gracias! –

+1

@VladimirMatveev Sí, hay otros complementos que están incluidos por defecto también. Uno obvio es 'maven-compiler-plugin'. – maba

+1

@VladimirMatveev Supongo que aquí puede encontrar los complementos principales: [Complementos disponibles de Maven] (http://maven.apache.org/plugins/index.html). – maba

1

Maven siempre copia los recursos que están dentro de src/main/resources por defecto.

De Maven Getting Started Guide:

La regla simple empleado por Maven es la siguiente: los directorios o archivos colocados dentro del directorio ${basedir}/src/main/resources se envasan en su JAR con la misma estructura exacta a partir de la base de la jarra.

+0

Sé de 'src/main/resources', pero mi configuración (tal vez no debería haberlo reemplazado por puntos suspensivos, simplemente pensé que era innecesario perder espacio) copia varios archivos en diferentes ubicaciones, y es esto lo que funciona a pesar de que el complemento se eliminó del pom del niño. He actualizado mi pregunta sobre este asunto. –