plugin exclude java maven-2

java - exclude - resources build maven



Ejecutar el objetivo del complemento Maven en módulos secundarios, pero no en el padre (6)

En un proyecto de varios módulos, ¿cómo puede especificar que desea ejecutar un objetivo de complemento en todos los módulos secundarios, pero no en el proyecto principal? Hay <pluginManagement> , 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 objetivo ejecutado:

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

¿Alguna otra forma de lograr esto?

ACTUALIZACIÓN: Lo he intentado de acuerdo con el consejo de Pascal:

<!-- ... --> <packaging>pom</packaging> <modules> <module>child</module> </modules> <build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <phase>integration-test</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <!-- ... -->

Esto aún generará un .jar para el proyecto principal, aunque el objetivo jar esté vinculado a la fase de integration-test .


Esta configuración a continuación funcionó para mí. Agregue el complemento tanto en el pom principal como en el secundario.

Padre:

<build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <inherited>true</inherited> <executions> <execution> <phase>integration-test</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>

Niño

<build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <inherited>false</inherited> <executions> <execution> <phase>integration-test</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <skip>false</skip> </configuration> </plugin> </plugins> </build>


La solución descrita con administración de plugins es ciertamente correcta, pero en ciertos casos no encaja. Supongamos que desea ejecutar varios objetivos 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 obligar a los poms de los niños a activar explícitamente los complementos.

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:

<profile> <id>generate-dc</id> <activation> <file> <exists>src/main/assembly/some.xml</exists> </file> </activation>

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.


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 compilación.

La publicación aquí describe una solución que funciona vinculando los complementos a los ID de ejecución y las fases de compilació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.


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

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

<plugin> <groupId>eviware</groupId> <artifactId>maven-soapui-plugin</artifactId> <version>4.0.0</version> <inherited>false</inherited> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> </dependency> </dependencies> <configuration> <skip>true</skip> </configuration> </plugin>

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

<plugins> <plugin> <groupId>eviware</groupId> <artifactId>maven-soapui-plugin</artifactId> <version>4.0.0</version> <configuration> <settingsFile>site-service-web/src/test/soapui/soapui-settings.xml</settingsFile> <projectFile>site-service-web/src/test/soapui/PodifiSite-soapui-project.xml</projectFile> <outputFolder>site-service-web/target/surefire-reports</outputFolder> <junitReport>true</junitReport> <exportwAll>true</exportwAll> <printReport>true</printReport> </configuration> </plugin> </plugins>


Utilice <inherited>false</inherited> en la sección de complementos del proyecto principal.

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


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

package site:attach-descriptor install install:install deploy deploy:deploy

Entonces, si su POM padre tiene un <packaging>pom<packaging> (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 compilación del POM padre.

(EDITAR: Mi respuesta inicial es simplemente incorrecta. Si vincula un objetivo 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 compilación .

Como señaló, puede usar pluginManagement en el pom padre para la configuración del complemento, pero si realmente desea ejecutar un objetivo 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:

<project> <packaging>pom</packaging> ... <modules> <module>child</module> </modules> ... <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <id>my-execution-id</id> <phase>integration-test</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> ... </plugins> </pluginManagement> </build> ... </project>

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

<project> ... <build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> </plugin> </plugins> ... </build> </project>