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

266

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

mvn install

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

Andrea Borgogelli Avveduti
fuente

Respuestas:

299

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 de plugin 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 laterales. La administración de complementos contiene elementos de complementos de la misma manera, excepto que, en lugar de configurar la información de complementos para esta compilación de proyecto en particular, está destinada a configurar compilaciones de proyectos que heredan de esta. Sin embargo, esto solo configura complementos a los que realmente se hace referencia dentro del elemento de complementos en los elementos secundarios. Los hijos tienen todo el derecho de anular las definiciones de pluginManagement.

jordeu
fuente
266

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

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

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

No necesita tener un <pluginManagement/>en su proyecto, si no es un POM principal. Sin embargo, si es un pom padre, 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 obtener información más específica, puede consultar:

Carlspring
fuente
Gracias por su respuesta. Necesito mezclar el pluginManagement y la etiqueta del complemento (para el complemento de dependencia maven) en el mismo archivo pom, porque necesito evitar un pequeño error del complemento IDE Eclipse de M2E. Ver stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
77
¡Gracias! :) Esto es lo mismo para <dependency/>y <dependencyManagement/>. Defina las dependencias (junto con sus versiones y ámbitos, si lo desea) en la <dependencyManagement/>sección y luego en la <dependencies/>sección que acaba de definir el groupIdy artifactId.
carlspring
1
si tengo que ejecutar un complemento dos veces, ¿debo usar pluginmanagement?
Kalpesh Soni
@KalpeshSoni: Depende, es posible que desee tener una configuración común entre las dos ejecuciones que no desea redefinir.
carlspring
39

Se usa pluginManagementen a parent pompara configurarlo en caso de que alguien child pomquiera usarlo, pero no todos los complementos secundarios quieren usarlo. Un ejemplo puede ser que super pomdefine algunas opciones para el complemento Javadoc de maven.

Es posible que no todos child pomdeseen usar Javadoc, por lo que define esos valores predeterminados en una pluginManagementsección. El pom hijo que quiere usar el complemento Javadoc, solo define una sección de complemento y heredará la configuración de la pluginManagementdefinición en parent pom.

Wim Deblauwe
fuente
Gracias. Solo estoy buscando mezclar pluginManagement y etiquetas de plugin en el mismo archivo pom porque necesito evitar un pequeño error del plugin M2E para Eclipse. Ver el stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
3

pluginManagement: es un elemento que se ve junto a los complementos laterales. La administración de complementos contiene elementos de complementos de la misma manera, excepto que, en lugar de configurar la información de complementos para esta compilación de proyecto en particular, está destinada a configurar compilaciones de proyectos que heredan de esta. Sin embargo, esto solo configura complementos a los que realmente se hace referencia dentro del elemento de complementos en los elementos secundarios. Los hijos tienen todo el derecho de anular las definiciones de pluginManagement.

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

Copiado de :

Maven2 - problema con pluginManagement y relación padre-hijo

hormiga
fuente