2010-08-05 8 views
5

Das ist meine Mutter pom.xml (ein Teil davon) in einem Projekt mit mehreren Modulen:Wie Maven Checkstyle Plugin in Multi-Modul-Projekt zu verwenden?

... 
<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> 
… 

Diese Konfiguration weist mvncheckstyle Plugin in dem Stammprojekt und jedes Untermodul auszuführen. Ich möchte nicht, dass es so funktioniert. Stattdessen möchte ich, dass dieses Plugin nur für das Root-Projekt ausgeführt wird und für jedes Untermodul übersprungen wird. Zur gleichen Zeit habe ich viele Untermodule, und ich mag die Idee nicht, die Ausführung des Plugins in jedem von ihnen explizit zu überspringen.

Dokumentation für checkstylesays "..ensure, dass Sie nicht das Maven Plugin Check in Ihrem Submodule enthalten ..". Aber wie kann ich sicherstellen, dass, wenn meine Untermodule meinen Stamm erben pom.xml? Ich bin verloren, bitte hilf mir.

Antwort

2

Vielleicht sollten Sie Ihren Root Pom in 2 separate Einheiten trennen: Eltern Pom und Aggregator Pom. Ihr Aggregator Pom kann sogar vom Elternpom erben.

Wenn Sie das neueste Projektlayout für Hibernate herunterladen, werden Sie dieses Designmuster in Aktion sehen.

Nachdem diese Trennung erfolgt ist, können Sie das Checkstyle-Plugin nur im Aggregator/Root-Pom definieren und ausführen. Da es nicht länger ein Elternteil Ihrer Untermodule ist, wird es nicht von ihnen geerbt.

EDIT
Verwenden <relativePath> wenn <parent>

Just for Demonstration erklärt, unten ist ein Beispiel aus der Hibernate-Projektstruktur übernommen.
Die gesamte Verteilung kann hier->http://sourceforge.net/projects/hibernate/files/hibernate3

Nur so finden, dass Sie einige Kontext haben, hier eine Teilmenge ihrer Verzeichnisstruktur

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

    .. rest is scipped for brevity 

Projekt-root/pom.xml Fragment

ist
<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> 

Projekt-root/Eltern/pom.xml Fragment

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

Projekt-root/core/pom.xml Fragment

<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

danke, der Vorschlag ist wirklich gut, aber jetzt gibt es ein anderes Problem. Mein Root-/Aggregator-Projekt kann nicht von "Eltern-Pom" erben, da es _under_ root ist und nicht während des ersten Gebäudezyklus verfügbar ist. Irgendwelche Ideen? – yegor256

+0

@ FaZend.com Ich habe einige Beispiele hinzugefügt. –

+1

Dies ist nicht notwendig, Sie können sagen, dass maven keine Plugin-Konfiguration erbt. –

4

Aber wie kann ich sicherstellen, dass, wenn meine Submodule meine Wurzel pom.xml erben?

streng Um diese Frage zu beantworten, können Sie ein <inherited> Element innerhalb einer <plugin> Definition angeben. Von den POM Reference:

geerbt:true oder false, ob diese Plugin-Konfiguration zu POMs, die von diesen erben gelten sollte.

Etwas wie folgt aus:

<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> 

Einige weitere Hinweise/Bemerkungen (das nicht zutrifft):

+0

Pascal, vielen Dank für die Vorschläge, sie sind sehr hilfreich (ich benutze sie bereits in meinem Projekt)! – yegor256

+0

@ FaZend.com Nun, gern geschehen. –

Verwandte Themen