在多模块maven项目中共享特定的PMD规则集

时间:2013-02-14 22:14:58

标签: maven checkstyle pmd

我正在尝试在所有子模块中共享相同的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 ​​

我尝试了这个适用于我的解决方案,因为我只对子模块有一个级别: 但在不久的将来,我可能会有更多的关卡,所以我不相信这是THE方法                                    $ {BASEDIR} /../的src /主/资源/ pmd.xml

解决方案2

如果没有编写所有解决方案,我可以使用程序集来压缩我的配置,并将其作为依赖项用于我的所有子模块中。这适用于任何级别,但这太过分了!

这是一个可以解释它的链接:How to include resources from war to another maven project

所以我正在寻找一个Maven技巧,但我不知道什么或如何!欢迎提出任何建议/线索。

2 个答案:

答案 0 :(得分:3)

有一个单独的模块,其中包含那些通用配置文件,如build-tools。然后,您可以将此模块作为依赖项添加到插件配置并加载它。

我已经在ksoap2-android项目中的多个模块中使用checkstyle配置文件实现了这个示例。

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

答案 1 :(得分:1)

我正在阅读documentation for the ruleset tag并且说

  

规则集可以驻留在类路径,文件系统或URL中。对于   与PMD工具捆绑在一起的规则集,您不需要   具体说明文件的绝对路径。它将由解决   插入。但是,如果规则集是自定义规则集,则需要指定   它的绝对路径。

我通过在父pom中指定规则集文件的URL解决了在我的多maven构建中共享PMD设置的问题。 (我的回购是http访问的)。不幸的是,如果您没有可访问的repo http,但是很多人可能会这样做。