5

親モジュールのすべての子であるいくつかの Maven モジュールで構成されるプロジェクトがあります。私は checkstyle を使用するように親を設定しており、子モジュールはすべてこの動作を正しく継承しています。すべての子モジュールで、そのプラグインで定義された親抑制ファイルを使用したいと考えています。checkstyle プラグインで使用されるプロパティcheckstyle.suppressionを定義します

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

これは親にとっては正常に機能しますが、すべての子モジュールはbasedirでファイルを見つけようとしますが、これは理にかなっています。
欠けている簡単な解決策があるに違いないと確信していますが、この場所を定義して、すべての子モジュールがハードコーディングせずに親の場所を使用する方法はありますか?

4

4 に答える 4

11

上記の回答は危険です。私は、各プロジェクトは自己完結型であるべきだと主張しているため、プロジェクトの外部にあるファイルを参照すると、遅かれ早かれビルドが壊れます。Checkstyle はファイルの URL を取得できますが、これはオフラインでビルドできないことを意味します。より良い方法は、ファイル (pmd.xml を追加することもできます) を jar にパッケージ化し、その jar を checkstyle (または pmd) プラグインのクラスパスに追加することです。ここにその例があり、プラグインのクラスパスをオーバーライドする方法についてはこちら

于 2009-09-03T18:24:01.307 に答える
2

プラグインのドキュメントでは、同様の使用例について言及しています: http://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html

于 2009-09-03T17:21:56.240 に答える
0

親 pom でこのようなプロパティを定義したり、子で再定義したりしましたか?

 <properties>
   <checkstyle.suppressions>${parent.project.basedir}\src\checkstyle\suppressions.xml</checkstyle.suppressions>
 </properties>
于 2009-09-03T15:29:33.813 に答える
0

親がcheckstyleを実行しない場合は、次のように書き換えることができるかもしれません

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

または、このようなもの。または、settings.xml に何かを入れて、すべてをシステム全体の構成ディレクトリに向けることもできます。

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

于 2009-09-03T15:34:39.470 に答える