Ejecutar el objective del complemento Maven en módulos secundarios, pero no en el padre

En un proyecto de varios módulos, ¿cómo puede especificar que desea ejecutar un objective de complemento en todos los módulos secundarios, pero no en el proyecto principal? Hay , pero eso solo define la configuración para la ejecución: los módulos secundarios todavía necesitarían hacer referencia al complemento para lograr el objective ejecutado:

[…] Sin embargo, esto solo configura los complementos a los que realmente se hace referencia dentro del elemento complementos en los elementos secundarios. ( Referencia POM )

¿Alguna otra manera de lograr esto?

ACTUALIZACIÓN: He intentado esto de acuerdo con el consejo de Pascal:

  pom  child     maven-jar-plugin   integration-test  jar        

Esto seguirá generando un .jar para el proyecto principal, aunque el objective del jar esté vinculado a la fase de integration-test .

De acuerdo con los enlaces de ciclo de vida predeterminados , los enlaces para un paquete de pom son:

Ataduras predeterminadas del ciclo de vida – Packaging pom

 sitio del paquete: attach-descriptor  
 instalar instalar: instalar  
 desplegar desplegar: desplegar

Entonces, si su POM padre tiene un pom (este debería ser el caso como se señala en un comentario) y si vincula sus complementos a otras fases diferentes a las anteriores (consulte Lifecycle Reference para obtener una lista completa), no se ejecutarán durante la comstackción del POM padre.

(EDITAR: Mi respuesta inicial es simplemente incorrecta. Si vincula un objective de complemento a una fase particular, se desencadenará durante esa fase, independientemente del empaquetado del proyecto. Las vinculaciones de ciclo de vida predeterminadas no tienen nada que ver con eso , son solo enlaces de ciclo de vida predeterminados. Lo único que importa es si la fase a la que está vinculado el complemento es parte del ciclo de vida de comstackción .

Como señaló, puede usar pluginManagement en el pom padre para la configuración del complemento, pero si realmente desea ejecutar un objective de complemento en los módulos secundarios y no en el principal (es posible que tenga buenas razones para hacerlo, pero la mayoría de tiempo, los complementos no tendrán mucho efecto en un módulo con un paquete de pom que no tenga ningún contenido), tendrá que hacer referencia a los complementos en el elemento de plugins elementos plugins .

Aplicado a su ejemplo, el padre pom.xml podría definir las siguientes especificaciones:

  pom ...  child  ...     org.apache.maven.plugins maven-jar-plugin 2.2   my-execution-id integration-test  jar     ...    ...  

Y en cada pom.xml hijo, solo se requiere lo siguiente:

  ...  ...   org.apache.maven.plugins maven-jar-plugin   ...   

La solución descrita con administración de plugins es ciertamente correcta, pero en ciertos casos no encaja. Supongamos que desea ejecutar varios objectives jar: jar en el módulo secundario, cada uno configurado con su propia configuración (configuración) por ejecución. O en general, cuando no quiere forzar a los poms infantiles a activar explícitamente el (los) complemento (s).

En este caso, la solución que funcionó para mí fue definir las ejecuciones en el pom padre bajo un perfil específico, y tenerlo activado solo en poms secundarios, por ejemplo, verificando la existencia de algún archivo o propiedad:

  generate-dc   src/main/assembly/some.xml   

Entonces, los complementos no se ejecutarán en el elemento primario, sino que se ejecutarán en todos los elementos secundarios si contienen el archivo o configuran alguna propiedad.

Tuve un requisito similar para ejecutar algunos complementos en el niño pero no en el POM original. Lo logré estableciendo true en el POM padre.

La entrada principal de pom está a continuación:

  eviware maven-soapui-plugin 4.0.0 false   junit junit 4.8.2    true   

La entrada del proyecto pom del niño está debajo

   eviware maven-soapui-plugin 4.0.0  site-service-web/src/test/soapui/soapui-settings.xml site-service-web/src/test/soapui/PodifiSite-soapui-project.xml site-service-web/target/surefire-reports true true true    

Probé la respuesta de Pascal pero no funcionó para mí. Los complementos a los que se hace referencia en el pom hijo no se ejecutaron, lo asumo porque no tenían un enlace de fase de comstackción.

La publicación aquí describe una solución que funciona vinculando los complementos a los ID de ejecución y las fases de comstackción: Cómo anular el enlace predeterminado a la fase de un complemento Maven

Lo recomendaría a cualquiera que intente hacer que esto funcione.

Utilice false en la sección de complementos del proyecto principal.

Por favor consulte esta página para más información.

Esta configuración abajo funcionó para mí. Agregue el plugin en el pom principal y secundario.

Padre:

    maven-jar-plugin true   integration-test  jar     true     

Niño

    maven-jar-plugin false   integration-test  jar     false