4

すべてのサブモジュールで同じpmd構成を共有しようとしています。私はそれを達成するための最良の方法を探しています

checkstyleプラグインの場合と同じように、親プロジェクトに配置できると思いました。

親pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                 <configLocation>/src/main/config/checkstyle.xml</configLocation>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.7.1</version>
            <configuration>
                <rulesets>
                    <ruleset>pmd.xml</ruleset>
                </rulesets>
                <linkXref>true</linkXref>
                <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                <targetJdk>${maven.compiler.target}</targetJdk>
            </configuration>
        </plugin>
    </plugins>
</build>

マルチモジュール構造

ここに私の構造

parent
|-- src
|   `-- main
|       `-- resources
|           |-- pmd.xml
|           `-- checkstyle.xml
|-- pom.xml
|-- model
|   `-- pom.xml
`-- webapp
    `-- pom.xml

エラー

この構成では、次のエラーのみが発生します。

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:2.7.1:pmd (default-cli) on project model: An error has occurred in PMD Report report generation. Could not find resource 'pmd.xml'. -> [Help 1]

解決策1

サブモジュールにはレベルが1つしかないため、このソリューションを試してみました。しかし、近い将来、レベルが増える可能性があるため、それがメソッド$ {basedir}/../src/mainであるとは確信していません。 /resources/pmd.xml

解決策2

すべてのソリューションを作成しなくても、アセンブリを使用して構成を圧縮し、すべてのサブモジュールで依存関係として使用できます。これはどのレベルでも機能しますが、これはやり過ぎです!

ここにそれを説明するリンクがあります:戦争から別のMavenプロジェクトにリソースを含める方法

だから私はMavenのトリックを探していますが、私は何をどのように行うのかわかりません!すべてのアドバイス/手がかりは大歓迎です。

4

2 に答える 2

3

build-toolsのような一般的な構成ファイルを含む別のモジュールを用意します。次に、このモジュールをプラグイン構成への依存関係として追加し、ロードできます。

ksoap2-androidプロジェクトの複数のモジュールにまたがるcheckstyle設定ファイルを使用してこの例を実装しました。

https://github.com/mosabua/ksoap2-android/blob/master/pom.xml

于 2013-02-14T22:38:29.980 に答える
1

ルールセットタグのドキュメントを読んでいたところ、

ルールセットは、クラスパス、ファイルシステム、またはURLに存在する場合があります。PMDツールにバンドルされているルールセットの場合、ファイルの絶対パスを指定する必要はありません。プラグインによって解決されます。ただし、ルールセットがカスタムルールセットの場合は、その絶対パスを指定する必要があります。

親pomのルールセットファイルへのURLを指定することで、マルチMavenビルド全体でPMD設定を共有する問題を解決しました。(私のリポジトリはhttpアクセス可能でした)。残念ながら、リポジトリhttpにアクセスできない場合、これは機能しませんが、多くの人が機能する可能性があります。

于 2013-03-08T22:11:09.110 に答える