PMD 报告需要很长时间才能生成。有什么办法可以暂时跳过 PMD 或 CPD 报告?

是的,每个报告都支持您可以在命令行上传递的跳过参数,分别为-Dpmd.skip=true-Dcpd.skip=true

[最佳]


如何生成指向 JXR 交叉引用源的链接?

首先确保linkXRef参数配置正确(默认开启)。

然后,必须首先运行 jxr 插件,以便 pmd 报告可以获取链接。如果您从命令行运行,请使用mvn jxr:jxr pmd:pmd,或者如果您想要站点插件生成的报告,请在您的报告部分配置 jxr 插件,请参阅 JXR 用法

[最佳]


我已添加 PMD/CPD 报告,但它们未显示在生成的站点中。插件执行了吗?

如果没有违规,则默认情况下不会创建报告,并且不会在站点中呈现整个 PMD 或 CPD 部分。要更改此行为,请将 PMD的 skipEmptyReport或CPD的 skipEmptyReport 设置 为false

[最佳]


违规、失败和警告之间有什么区别,以及构建何时失败?

PMD 报告违规行为。这些违规源自规则 - 在配置的规则集中启用的规则(请参阅属性规则集)。每个规则都有一个分配的优先级(1 - 高,2 - 中高,3 - 中,4 - 中低,5 - 低)。此优先级也用于违规。

使用检查目标 时,具有足够高优先级的违规行为可能会导致构建失败。这些违规行为被称为“失败”。确切的优先级,即构建失败的时间,是通过属性 failurePriority配置的。

优先级太低而无法使构建失败的违规行为称为“警告”。 如果启用 了属性verbose,这些警告会出现在报告中并显示在构建输出中。

使用属性failOnViolation可以完全禁用构建失败。这在带有-Dpmd.failOnViolation=false的命令行中最有用。

使用属性maxAllowedViolations可以配置在构建失败之前允许多少次失败。

[最佳]


什么警告“项目 xyz 似乎没有被编译。PMD 结果可能不准确。” 意思是?

为了改进 PMD 的结果,应该使用类型解析。它默认启用(属性typeResolution),并通过匹配方法参数或变量的确切类型来帮助避免误报发现。

但是,这需要先构建项目,这样不仅可以使用项目的依赖项进行类型解析,还可以使用项目的类。

当使用属性aggregate时,这是有问题的:如果 aggregate=true,PMD 在构建单个模块之前在多模块项目的根目录中执行。然后各个项目的类型不可用,这可能导致误报发现,例如规则“UnusedPrivateMethod”。如果可能是这种情况,则会发出警告“项目 xyz 似乎没有被编译。PMD 结果可能不准确”。

为了同时使用类型解析和聚合,maven 需要分两遍执行:第一遍将编译项目(例如mvn clean package),第二遍将通过验证阶段(例如mvn verify)在不清理的情况下执行 PMD。

从 3.15.0 版本开始,可以使用新的目标aggregate-pmd,它允许只用一个 maven 调用来运行所有东西。但是,这个目标会在执行自身之前调用生命周期 测试编译,这可能会导致某些插件的重复执行。

[最佳]