5

PMDプロジェクトをビルドするときにAnt実行しようとしています。Eclipse

これは私のbuild.xmlファイルです:

<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>

<target name="check_pmd">
    <pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\basic.xml">
        <formatter type="html" toFile="pmd_report.html" toConsole="true"/>
        <fileset dir="C:\Users\Nikolay\ProjectName\src">
            <include name="**/*.java"/>
        </fileset>
    </pmd>
</target>

ではうまく機能しますbasic.xmlが、フォルダー内のすべてのルールセットに対して実行したいjava(約 20 のルールセットがあります) だから私は試しました:

<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*.xml">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*">

しかし、実行しようとすると、どちらも失敗します。ファイルのリストを手動で指定せずに単一のファイルではなく、フォルダーを指定する方法はありますか?

今後の読者が Eclipse で Ant PMD を構成するには:

  • pmd-bin.zip公式サイトからダウンロード
  • 開梱しpmd.jarjaxen.jarasm.jar
  • 上記の jar を Window - Preferences - Ant - Runtime - Ant Home Entries - Add External JARs に追加します。
  • 解凍rulesetsフォルダ
  • からのルールセットの参照場所<pmd rulesetfiles=...>
4

3 に答える 3

4

(antタスクのcoolfanからの回答を拡大)

PMD rulesetfiles のドキュメントには、ファイルのカンマ区切りのリストであると記載されています。

rulesetfiles ルールセット ファイルのコンマ区切りリスト ('rulesets/basic.xml,rulesets/design.xml')。独自のルールセット ファイルを作成する場合は、それらをクラスパスに配置して、ここにプラグインできます。はい、ルールセットのネストされた要素が使用されていない限り

Ant は、ファイルセットをそのような形式に変換する方法を提供します。タスクはパス変換です

これはウェブサイトの例です

<fileset dir="${src.dir}" id="src.files">
      <include name="**/*.java"/>
 </fileset>

 <pathconvert pathsep="," property="javafiles" refid="src.files"/>
于 2013-03-11T07:58:35.107 に答える
3

ドキュメントが示唆しているように、パラメータはワイルドカードをサポートしていない可能性があります。

そのソースコードをざっと見てみると、私の推測もサポートされています。RuleSetReferenceId.javaの194行目を参照してください。

,したがって、次のように、区切り文字として使用する「リスト」を含むプロパティを取ります。

"rule1,rule2,rule3,path-to-rule-file4"

回避策は、ディレクトリをスキャンし、すべてのrule-xmlファイルを一覧表示し、カンマ区切り形式でプロパティを作成してから、それを<pmd>タスクに渡すことです。

残念ながら、これを実行できるアリのタスクはわかりません。したがって、いくつかのコードを作成する必要があるかもしれません。

私は2つの方法を思い付くことができます:

  1. アリのタスクを書く。このように、Javaについては多くのQ&Aがあります。
  2. <groovy>タスク内にgroovyを書き込みます。また、多くのQ&A

編集:

ジャヤンは<pathconvert>、正しい答えであるはずのタスクを提案します。

于 2013-03-11T02:57:35.837 に答える