¿Qué es pluginManagement en pom.xml de Maven?

Resuelto Andrea Borgogelli Avveduti asked hace 12 años • 5 respuestas

Este es un fragmento de mi archivo 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 exitosamente con el comando.

mvn install

Pero, cuando intento incluirlo en la etiqueta "pluginManagement", deja maven-dependency-pluginde funcionar cuando lanzo el installobjetivo. ¿Por qué la etiqueta "pluginManagement" cambia el comportamiento de compilación? ¿O debería utilizar otro objetivo u opción?

Aceptado

Aún necesitas agregar

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

en su compilación, porque pluginManagementes solo una forma de compartir la misma configuración del complemento en todos los módulos de su proyecto.

De la documentación de Maven:

pluginManagement : es un elemento que se ve junto a los complementos. La administración de complementos contiene elementos de complementos de manera muy similar, excepto que en lugar de configurar la información del complemento para esta compilación de proyecto en particular, su objetivo es configurar compilaciones de proyectos que heredan de éste. Sin embargo, esto solo configura complementos a los que realmente se hace referencia dentro del elemento complementos en los elementos secundarios. Los niños tienen todo el derecho a anular las definiciones de pluginManagement.

jordeu avatar May 07 '2012 13:05 jordeu

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

  • <pluginManagement/>define la configuración de los complementos que heredarán los módulos de su compilación. Esto es excelente para los casos en los que tiene un archivo pom principal y desea evitar tener que copiar el mismo código para la configuración del complemento en cada uno de estos módulos.

  • <plugins/>es una sección para la invocación real de los complementos. Puede o no heredarse de un archivo <pluginManagement/>.

No es necesario tener un POM <pluginManagement/>en su proyecto si no es un POM principal. Sin embargo, si es un pom principal, entonces en el pom del niño, debe tener una declaración como:

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

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

Para información más específica, puedes consultar:

  • La referencia de Maven pom.xml: complementos

  • La referencia de Maven pom.xml: Gestión de complementos

carlspring avatar May 07 '2012 13:05 carlspring