Как использовать плагин Maven Checkstyle в многомодульном проекте? - PullRequest
7 голосов
/ 05 августа 2010

Это мой родитель pom.xml (часть его) в многомодульном проекте:

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

Эта конфигурация указывает mvn выполнить checkstyle плагин в корневом проекте и каждого субмодуля. Я не хочу, чтобы это работало так. Вместо этого я хочу, чтобы этот плагин выполнялся только для корневого проекта и был пропущен для каждого подмодуля. В то же время у меня много подмодулей, и мне не нравится идея явно пропустить выполнение плагина в каждом из них.

Документация для checkstyle говорит" .. убедитесь, что вы не включили плагин Maven Checkstyle в свои подмодули .. ". Но как я могу убедиться, что мои подмодули наследуют мой корень pom.xml? Я потерялся, пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 05 августа 2010

Но как я могу убедиться, что мои подмодули наследуют мой корневой файл pom.xml?

Чтобы строго ответить на этот вопрос, вы можете указать элемент <inherited> внутри определения <plugin>. Из справочника POM :

унаследовано: true или false, должна ли эта конфигурация плагина применяться к POM, которые наследуют от этого.

Примерно так:

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

Еще несколько советов / замечаний (которые могут не применяться):

2 голосов
/ 05 августа 2010

Возможно, вам следует разделить ваш корневой pom на 2 отдельных объекта: родительский pom и агрегаторный pom. Ваш агрегатор pom может даже наследоваться от родительского pom.

Если вы загрузите последний макет проекта для hibernate, вы увидите этот шаблон дизайна в действии.

После того, как это разделение выполнено, вы можете определить и запустить плагин checkstyle только в агрегаторе / корневой помпе. Поскольку он больше не является родителем ваших подмодулей, он не будет наследоваться ими.

EDIT
Используйте <relativePath> при объявлении <parent>

Только для демонстрации ниже приведен пример, взятый из структуры проекта hibernate.
Весь дистрибутив можно найти здесь-> http://sourceforge.net/projects/hibernate/files/hibernate3

Просто, чтобы у вас был какой-то контекст, вот подмножество их макета каталога

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

   .. rest is scipped for brevity

фрагмент проекта-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>

Project-root / parent / pom.xml фрагмент

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

Project-root / core / 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-core</artifactId>
<packaging>jar</packaging>
...