2010-08-05 23 views
5

Esta es mi padre pom.xml (parte de ella) en un proyecto de varios módulos:Cómo usar el complemento Maven checkstyle en un proyecto de varios módulos?

... 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-checkstyle-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>check</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
… 

Esta configuración da instrucciones para ejecutar mvncheckstyle plug-in en el proyecto raíz y cada sub-módulo. No quiero que funcione de esta manera. En cambio, quiero que este complemento se ejecute solo para el proyecto raíz y se omita para cada submódulo. Al mismo tiempo, tengo muchos submódulos y no me gusta la idea de omitir explícitamente la ejecución del complemento en cada uno de ellos.

Documentación para checkstylesays "..ensure que no se incluye el Maven Plugin Checkstyle en sus módulos de sub ..". Pero, ¿cómo puedo asegurarme de que si mis submódulos heredan mi raíz pom.xml? Estoy perdido, por favor ayuda.

Respuesta

2

Quizás debería separar su raíz pom en 2 entidades separadas: parent pom y aggregator pom. Su agregador pom puede incluso heredar de padre pom.

Si descarga la última disposición del proyecto para hibernar, verá este patrón de diseño en acción.

Después de realizar esta separación, puede definir y ejecutar el complemento checkstyle solo en el agregador/root pom. Debido a que ya no es uno de los padres de sus submódulos, no será heredado por ellos.

EDITAR
Uso <relativePath> al declarar <parent>

sólo para demostración, a continuación se muestra un ejemplo tomado de la estructura del proyecto de hibernación.
toda la distribución se puede encontrar aquí->http://sourceforge.net/projects/hibernate/files/hibernate3

Sólo así, que tiene un cierto contexto, aquí es un subconjunto de la estructura de directorios

project-root 
    | 
    +-pom.xml 
    | 
    + parent 
    | | 
    | +-pom.xml 
    | 
    + core 
     | 
     +-pom.xml 

    .. rest is scipped for brevity 

fragmento proyecto-root/pom.xml

<parent> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-parent</artifactId> 
    <version>3.5.4-Final</version> 
    <relativePath>parent/pom.xml</relativePath> 
</parent> 

<groupId>org.hibernate</groupId> 
<artifactId>hibernate</artifactId> 
<packaging>pom</packaging> 

<name>Hibernate Core Aggregator</name> 
<description>Aggregator of the Hibernate Core modules.</description> 

<modules> 
    <module>parent</module> 
    <module>core</module> 

fragmento proyecto-root/padre/pom.xml

<groupId>org.hibernate</groupId> 
<artifactId>hibernate-parent</artifactId> 
<packaging>pom</packaging> 
<version>3.5.4-Final</version> 

proyecto-root/core/pom.xml fragmento

<parent> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-parent</artifactId> 
    <version>3.5.4-Final</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

<groupId>org.hibernate</groupId> 
<artifactId>hibernate-core</artifactId> 
<packaging>jar</packaging> 
+0

gracias, la sugerencia es realmente buena, pero ahora hay otro problema. Mi proyecto root/agregador no puede heredar de "parent pom" ya que es _under_ root y no está disponible durante el primer ciclo de construcción. ¿Alguna idea? – yegor256

+0

@ FaZend.com He agregado algunos ejemplos. –

+1

Esto no es necesario, puedes decirle a maven que no herede una configuración de complemento. –

4

Pero, ¿cómo puedo estar seguro de que si mis submódulos heredan mi pom.xml raíz?

Para responder a esta pregunta estrictamente, puede especificar un elemento <inherited> dentro de una definición <plugin>. Desde el POM Reference:

heredada:true o false, si esta configuración del plugin debe aplicarse a los POM, que heredar de éste.

Algo como esto:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-checkstyle-plugin</artifactId> 
    <!-- Lock down plugin version for build reproducibility --> 
    <version>2.5</version> 
    <inherited>true</inherited> 
    <configuration> 
    ... 
    </configuration> 
</plugin> 

Algunos más Avisos/observaciones (que puede no ser aplicable):

+0

Pascal, muchas gracias por las sugerencias, son muy útiles (¡ya los estoy usando todos en mi proyecto)! – yegor256

+0

@ FaZend.com Bueno, de nada. –

Cuestiones relacionadas