maven plugins reporting dependency-management

En un proyecto de varios módulos Maven, ¿cómo puedo desactivar un complemento en un elemento secundario?



plugins reporting (2)

Tengo un proyecto multi-módulo maven (chico, he escrito esa forma de apertura muchas veces en este sitio). Casi todos los módulos (es decir, los que tienen código en ellos) deben ejecutar el maven-site-plugin para generar informes sobre la cobertura del código, etc. Estos tienen una configuración compartida detallada: qué informes ejecutar, qué archivos cubrir / excluir para ciertos complementos, etc.

Sin embargo, hay algunos módulos que se ocupan del empaquetado: ejecutar el complemento de ensamblaje para generar un tarball, etc. No obtienen nada al ejecutar un informe del sitio: no hay código para analizar ni pruebas para informar.

Así que tengo muchos módulos que necesitan compartir la configuración del complemento y algunos módulos que no necesitan ejecutar el complemento , preferiblemente. Puedo hacer lo anterior (compartir configuración) si coloco el complemento en la sección <build> del POM principal, pero parece que no puedo desactivar el complemento cuando lo necesito en este caso. Puedo hacer esto último (evitar ejecutar el complemento) si presiono la configuración hacia el propio POM de cada módulo, pero no puedo encontrar una buena manera de compartir la información de configuración en este caso.

¿Es lo que deseo, incluso la configuración compartida, para un complemento que algunas veces está deshabilitado por un módulo secundario? ¿Si es así, cómo?


Con "ejecutar el complemento", supongo que quiere decir que el complemento está vinculado a una fase de ciclo de vida y desea desvincularlo en algunos módulos. Primero, podría considerar cambiar su herencia de POM para que los módulos que no necesitan los complementos tengan un padre y los que sí lo tengan. Si no quiere hacer eso, entonces puede establecer explícitamente la fase de ejecución en "nada" en un módulo secundario. Por ejemplo, si tienes una configuración de pom padre como esta:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>i-do-something</id> <phase>initialize</phase> <goals> <goal>exec</goal> </goals> <configuration> ... lots of configuration </configuration> </execution> </executions> </plugin>

Luego, en un módulo secundario, podrías hacer esto:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>i-do-something</id> <phase/> </execution> </executions> </plugin>

Debido a que es el mismo complemento y el mismo ID de ejecución, anula la configuración especificada en el elemento primario, y ahora el complemento no está vinculado a una fase en el proyecto secundario.


La respuesta de Ryan Stewart funciona si la ejecución que desea suprimir en el pom padre está etiquetada con un id . Sin embargo, si el pom principal no etiqueta la ejecución con un id (y, por supuesto, no puede editar ese pom padre), entonces descubrí que al hacer lo siguiente se suprime la acción del pom padre.

  1. Primero configure la fase de la ejecución como none
  2. Crea otra ejecución, dale una id y haz en ella lo que necesitas hacer.
  3. Ejecute mvn help:effective-pom para confirmar que ha suprimido correctamente lo que necesitaba suprimido del pom principal.

Aquí hay un ejemplo: así es como se veía mi pom padre:

<plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> <inherited>true</inherited> </plugin>

Necesitaba cambiar el objetivo a jar-no-fork . Tenga en cuenta que la ejecución en parent pom no tiene una id que pueda usar para deshabilitarla. Así que esto es lo que agregó a mi hijo pom:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <phase>none</phase> </execution> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin>

Como resultado, así es como se ve el efectivo-pom:

<plugin> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>none</phase> <goals> <goal>jar</goal> </goals> <configuration> <archive> <compress>false</compress> </archive> </configuration> </execution> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> <configuration> <archive> <compress>false</compress> </archive> </configuration> </execution> </executions> <inherited>true</inherited> <configuration> <archive> <compress>false</compress> </archive> </configuration> </plugin>

Esto aseguró que el jar objetivo nunca se ejecute y solo se ejecute el objetivo jar-no-fork , que es lo que quería lograr.