与 Maven 父模块中的 Checkstyle 和 PMD 配置的区别
Difference with Checkstyle and PMD configuration in maven parent module
我有一个 java 应用程序,其 maven 具有以下结构:
parent
| - pom.xml
| - child
| - pom.xml
| - analyzers
| - pmdrules.xml
| - checkstyle.xml
我已经在父 pom.xml 中配置了 PMD 和 checkstyle。对于 PMD,规则集配置如下,父子模块都可以正常工作:
<configuration>
<rulesets>
<ruleset>${basedir}/../analyzers/pmdrules.xml</ruleset>
</rulesets>
</configuration>
但是,对于 checkstyle,如果我以相同的方式配置 configLocation,它会在父项或子项中失败。我必须使用自定义 属性 来克服这个问题。
<configuration>
<!-- Below config with ${projectRootDir}, a custom property always pointing to parent root works fine -->
<configLocation>${projectRootDir}/analyzers/checkstyle.xml</configLocation>
<!-- Below configurations with ${basedir} will fail build for child -->
<!--<configLocation>${basedir}/analyzers/checkstyle.xml</configLocation>-->
<!-- Below configurations with ${basedir} will fail build for parent -->
<!--<configLocation>${basedir}/../analyzers/checkstyle.xml</configLocation>-->
</configuration>
这是一个复制样本 - https://github.com/ramtech123/pocs/blob/master/myapp-parent-module/pom.xml
我尝试 运行 在调试模式下构建 Maven。从日志来看,对我来说,实际的 PMD 执行似乎只发生在子模块上,因此它没有问题。
谁能帮助我了解根本原因,并改进我的配置。
提前致谢。
当您创建子项时 pom.xml
它会继承其父项配置,但是 baseDir
等属性会被子项覆盖,因此在模板化您的插件配置时它会使用自己的路径。
作为一个选项,您可以只留下 <configLocation>analyzers/checkstyle.xml</configLocation>
而没有 {baseDir}
或 {projectRootDir}
,它工作正常。
但是您的解决方案也很好,因为您在父根目录中指定了 projectRootDir
,并且在那里进行了评估,子 pom 不会覆盖您的自定义 属性,因此它是正确的。
您的 pmd 始终有效,因为 pmd 插件仅针对子模块运行。
我有一个 java 应用程序,其 maven 具有以下结构:
parent
| - pom.xml
| - child
| - pom.xml
| - analyzers
| - pmdrules.xml
| - checkstyle.xml
我已经在父 pom.xml 中配置了 PMD 和 checkstyle。对于 PMD,规则集配置如下,父子模块都可以正常工作:
<configuration>
<rulesets>
<ruleset>${basedir}/../analyzers/pmdrules.xml</ruleset>
</rulesets>
</configuration>
但是,对于 checkstyle,如果我以相同的方式配置 configLocation,它会在父项或子项中失败。我必须使用自定义 属性 来克服这个问题。
<configuration>
<!-- Below config with ${projectRootDir}, a custom property always pointing to parent root works fine -->
<configLocation>${projectRootDir}/analyzers/checkstyle.xml</configLocation>
<!-- Below configurations with ${basedir} will fail build for child -->
<!--<configLocation>${basedir}/analyzers/checkstyle.xml</configLocation>-->
<!-- Below configurations with ${basedir} will fail build for parent -->
<!--<configLocation>${basedir}/../analyzers/checkstyle.xml</configLocation>-->
</configuration>
这是一个复制样本 - https://github.com/ramtech123/pocs/blob/master/myapp-parent-module/pom.xml
我尝试 运行 在调试模式下构建 Maven。从日志来看,对我来说,实际的 PMD 执行似乎只发生在子模块上,因此它没有问题。
谁能帮助我了解根本原因,并改进我的配置。
提前致谢。
当您创建子项时 pom.xml
它会继承其父项配置,但是 baseDir
等属性会被子项覆盖,因此在模板化您的插件配置时它会使用自己的路径。
作为一个选项,您可以只留下 <configLocation>analyzers/checkstyle.xml</configLocation>
而没有 {baseDir}
或 {projectRootDir}
,它工作正常。
但是您的解决方案也很好,因为您在父根目录中指定了 projectRootDir
,并且在那里进行了评估,子 pom 不会覆盖您的自定义 属性,因此它是正确的。
您的 pmd 始终有效,因为 pmd 插件仅针对子模块运行。