2010-08-05 3 views
5

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

... 
<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 плагин в корневом проекте и каждый суб-модуль. Я не хочу, чтобы он работал таким образом. Вместо этого я хочу, чтобы этот плагин исполнялся только для корневого проекта и пропускался для каждого подмодуля. В то же время у меня много подмодулей, и мне не нравится идея явно пропускать выполнение плагина в каждом из них.

Документация для checkstylesays «..ensure, что вы не включаете в Maven Checkstyle плагин в ваших подразделах модулей ..». Но как я могу гарантировать, что если мои подмодули наследуют мой корень pom.xml? Я потерян, пожалуйста, помогите.

ответ

2

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

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

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

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

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

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

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

    .. rest is scipped for brevity 

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

фрагмент проекта корня/родителя/pom.xml

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

проект корень/ядро ​​/ 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> 
+0

спасибо, предложение действительно хорошее, но теперь есть еще одна проблема. Мой проект root/aggregator не может наследовать «родительский pom», поскольку он является _under_ root и недоступен в течение первого цикла строительства. Любые идеи? – yegor256

+0

@ FaZend.com Я добавил несколько примеров. –

+1

Это необязательно, вы можете сказать, что maven не наследует конфигурацию плагина. –

4

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

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

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

Что-то вроде этого:

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

Некоторые больше Советы/замечания (которые могут не применять):

  • Вы должны всегда блокировки версии плагина для сборки воспроизводимости (вы можете применяйте это правило с помощью Maven Enforcer Plugin).
  • Люди обычно хотят использовать a Custom Checkstyle Checker Configuration и/или a Suppressions Filter.
  • Multimodule Configuration описывает типичную настройку, позволяющую обмениваться конфигурационными файлами в проектах с большими мультимодулями.
+0

Паскаль, большое спасибо за предложения, они очень полезны (я уже использую все их в своем проекте)! – yegor256

+0

@ FaZend.com Ну, пожалуйста. –