2012-05-07 13 views
172

Este es un fragmento de mi archivo pom.Maven: ¿Qué es la gestión de complementos?

.... 
     <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 éxito con el comando

mvn install 

Pero, cuando trato de incluir en la etiqueta "pluginManagement", los maven-dependency-plugin deja de funcionar cuando inicio el objetivo install. ¿Por qué la etiqueta "pluginManagement" cambia el comportamiento de compilación? ¿O debería usar otro objetivo u opción?

Respuesta

222

Todavía es necesario añadir

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

en su construcción, debido pluginManagement es sólo una manera de compartir el mismo configuración del complemento en todos los módulos de su proyecto.

De la documentación Maven:

pluginManagement: es un elemento que se ve a lo largo plugins secundarios. La administración de complementos contiene elementos de complementos de la misma manera, excepto que en lugar de configurar la creación de complementos para esta compilación de proyecto en particular, se pretende configurar compilaciones de proyectos heredadas de esta. Sin embargo, esto solo configura los complementos a los que se hace referencia en el elemento de complementos en los elementos secundarios. Los niños tienen todo el derecho de anular las definiciones de PluginManagement.

3

pluginManagement: es un elemento que se ve a lo largo de los complementos. La administración de complementos contiene elementos de complementos de la misma manera, excepto que en lugar de configurar la creación de complementos para esta compilación de proyecto en particular, se pretende configurar compilaciones de proyectos heredadas de esta. Sin embargo, esto solo configura los complementos a los que se hace referencia en el elemento de complementos en los elementos secundarios. Los niños tienen todo el derecho de anular las definiciones de PluginManagement.

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

Copiado:

Maven2 - problem with pluginManagement and parent-child relationship

26

Utiliza pluginManagement en un pom padre para configurarlo en caso de que cualquier pom hijo desee usarlo, pero no todos los complementos hijo quieren usarlo. Un ejemplo puede ser que su super pom define algunas opciones para el plugin Maven Javadoc. No es posible que cada pom hijo desee utilizar Javadoc, por lo que debe definir esos valores predeterminados en una sección de pluginManagement. El pom hijo que quiere usar el complemento Javadoc, solo define una sección de complemento y heredará la configuración de la definición de pluginManagement en el pom padre.

+0

Gracias. Solo busco mezclar las etiquetas pluginManagement y plugin en el mismo archivo pom porque necesito eludir un pequeño error del plugin M2E para Eclipse. Consulte http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

168

La diferencia entre <pluginManagement/> y <plugins/> es que:

  • <pluginManagement/> define la configuración de los plugins que serán heredados por módulos en su construcción. Esto es ideal para casos en los que tienes un archivo pom padre.

  • <plugins/> es una invocación real del complemento. Puede o no ser heredado de un <pluginManagement/>.

Usted no necesita tener un <pluginManagement/> en su proyecto, si no es un POM padres. Sin embargo, si se trata de un pom padres, a continuación, en el pom del niño, es necesario tener una declaración como:

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

Aviso cómo no se está definiendo cualquier configuración. Puede heredarlo del padre, a menos que necesite ajustar aún más su invocación según las necesidades del proyecto secundario.

Para obtener información más específica, se puede comprobar:

  • La referencia Maven pom.xml: plugins

  • La referencia Maven pom.xml: Gestión Plugin

+0

Gracias por su respuesta. Necesito mezclar la etiqueta pluginManagement y plugin (para maven-dependency-plugin) en el mismo archivo pom, porque necesito eludir un pequeño error del complemento IDE M2E Eclipse. Consulte http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

+7

¡Gracias! :) Esto es lo mismo para '' y ''. Defina las dependencias (junto con sus versiones y ámbitos, si lo desea) en la sección '' y luego en la sección '' usted solo define 'groupId' y' artifactId'. – carlspring

+0

si tengo que ejecutar un complemento dos veces, ¿debería usar pluginmanagement? –

Cuestiones relacionadas