マルチモジュールでCheckStyleとかのルールを共有する

CheckStyleFindBugsを使ってソースのチェックしていますが、標準のルールでは自分のスタイルとは多少違うところがあるので、カスタマイズしたルールをプロジェクトに配置して、maven-checkstyle-plugin等でルールを指定していました。



この方法だと、マルチモジュール構成の場合は各サブモジュールにもルールを配置しないとできませんし、ルールを一元管理もできません。プロパティを使えばできるような気がしますが...

そこで、Cgheckstyle Multimodule Configurationを参考に、ルールの共有化をやってみます。

ルール用のjarの作成

src/main/resourceに各ツール毎のルールやフィルターを配置します。check-rules.jarを作成し、ローカルやMavenリポジトリにインストールします。pom.xmlはjarと同じです。


ルールの指定

次に、このルールを使用するプロジェクトの親のpom.xmlを設定します。

check-rules.jarの設定

/project/build/etensions/extensionに先ほど作ったcheck-rules.jarを設定します。extensionに設定するとビルド時のクラスパスに含まれます。詳細はPOMリファレンスを参照してください。

   <build>
        : 
        <extensions>
            <extension>
                <groupId>jp.ddo.bacons</groupId>
                <artifactId>check-rules</artifactId>
                <version>0.1</version>
            </extension>
        </extensions>
    </build>
maven-checkstyle-pluginの設定

/project/reporting/pluginsにmaven-checkstyle-pluginを追加します。confgiLocationには、クラスパスにあるcheck-rules.jarのルールを指定します。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.3</version>
        <configuration>
            <configLocation>default/checkstyle/checkstyle.xml</configLocation>
            <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
    </plugin>

findbugsやPMDも同様です。

リポジトリの設定

最後に、check-rules.jarのリポジトリを/project/repositories/repositoryに設定します。

    <repository>
        <id>bacons.ddo.jp repository</id>
        <url>http://bacons.ddo.jp/maven2/</url>
    </repository>


これで、サブモジュールにルールを配置する必要が無くなりますし、ルールの一元管理もできるようになります。