2009-09-03 7 views
4

私は親モジュールのすべての子であるいくつかのMavenモジュールで構成されるプロジェクトを持っています。 私は親がcheckstyleを使用するように設定しており、子モジュールはすべてこの動作を正しく継承しています。すべての子モジュールがそのプラグインで定義されている親抑制ファイルを使用したいと思います。 私は親のために正常に動作しますが、すべての子モジュールが理にかなってい彼らのbasedirにでファイルを検索しようのCheckstyleプラグインすべてのモジュールに対してMavenで単一のチェックスタイルの抑制ファイルを使用する方法

<properties> 
    <checkstyle.suppressions>${basedir}\src\checkstyle\suppressions.xml</checkstyle.suppressions> 
</properties> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-checkstyle-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <configLocation>config/sun_checks.xml</configLocation> 
     <suppressionsLocation>${checkstyle.suppressions}</suppressionsLocation> 
     <suppressionsFileExpression>${checkstyle.suppressions}</suppressionsFileExpression> 
    </configuration> 
    </plugin> 
</plugins> 

で使用されるプロパティcheckstyle.suppressionを定義します。
私は紛失している簡単な解決策があるに違いないと確信していますが、すべての子モジュールが親の場所をハードコードなしで使用するようにこの場所を定義する方法はありますか?

答えて

11

上記の答えは危険です。私は、各プロジェクトは自己完結型でなければならないと考えています。そのため、外部のファイルを参照すると、遅かれ早かれビルドが中断されます。 CheckstyleはファイルのURLを取ることができますが、それはオフラインでは構築できないことを意味します。より良い方法は、ファイルをパッケージ化することです(pmd.xmlをpmir.xmlに追加することもできます)。次に、checkstyle(またはpmd)プラグインのクラスパスにそのjarを追加します。私はその例を持っていますhereとプラグインのクラスパスのオーバーライドについてもっとhere

+0

このリソースのBrianに感謝し、今後の使用のためにブックマークします: これは、開発者が任意の場所にチェックインできるという理由で、リソースの固定場所を定義したくないため、場所とビルドマシンも異なる場所とファイルシステムを持ちます。 この例のように、リソースはアセンブリプラグインを使用してバンドルされ、次に解凍され、子モジュールで使用されます。 ありがとう –

+0

+1ローカルファイルシステム構造に依存する設定を避けるべきです –

+0

このバグ:https://issues.apache.org/jira/browse/MCHECKSTYLE-228は現在、 'suppressions.xml'を使用することを不可能にしています。残念ながら、JARから。 –

0

親のpomでこのようなプロパティを定義しようとしましたか、それとも子供の中で再定義しましたか?

<properties> 
    <checkstyle.suppressions>${parent.project.basedir}\src\checkstyle\suppressions.xml</checkstyle.suppressions> 
</properties> 
+0

私はこれを試しましたが、いつもヌルを返していますので、おそらく親だけで宣言されています。
-X(デバッグ)を使用してmavenを実行すると、この値がnullであることがわかります。 –

0

親がのCheckstyleを実行するつもりはないされている場合は、あなただけの

<properties> 
    <checkstyle.suppressions>..\..\src\checkstyle\suppressions.xml</checkstyle.suppressions> 
</properties> 

またはこのような何かにそれを書き換えることができるかもしれません。あるいは、settings.xmlに何かを入れて、すべてをシステムワイド構成ディレクトリに向けることもできます。

ブートストラップまたはセットアッププロジェクトまたはタスクを使用すると、suppress.xmlファイルのコピーをsettings.xmlのプロパティで指定された場所に配置してから、常に参照することができますその場所でそれに繋がります。

+0

これが私にとってうまくいかない理由は、 です。チェック・スタイル・プラグインを子モジュールに宣言していないので(おそらく私がすべきです)、このプロパティが親に設定され、子モジュールが異なるディレクトリ・デプスを持つことがあります。 so私は parent> webservices> cxf> sso と言うと parent> security> sso 各モジュールにプラグインを定義してこの表記を使用できますが、私はそうしたくありません。 私はsettings.xmlで定義することができますが、これはあらかじめ定義された場所にチェックアウトするか、ソースをチェックアウトする場所に変更することを覚えています。 –

+0

xmlライセンスファイルに対する回避策は、ユーザーが$ home/.m2/license.xmlにコピーして、そのファイルを設定ファイルに設定させることでした。また、そのファイルをダウンロードして$ home/.m2 /ディレクトリに置くセットアッププロジェクトも使用しました。それが助けになるかもしれない。 – sal

関連する問題