我在Jenkins上使用Sonar的PMD插件来静态分析我的代码。我也在运行Eclipse的PMD插件(eclipse-pmd 1.5准确(http://marketplace.eclipse.org/content/eclipse-pmd))。
我的问题如下:我想要抑制某个PMD警告。让我们说我想在名为Rule的类上禁止警告ShortClassName(http://pmd.sourceforge.net/pmd-5.1.1/rules/java/naming.html)。请看以下示例:
@SuppressWarnings("pmd:ShortClassName")
public class Role {
//The class fields, constructors, methods ...
}
这可以很好地抑制Sonar上的警告。但是,它并没有抑制eclipse-pmd上的警告。要做这样的事情,我必须做到以下几点:
@SuppressWarnings({ "pmd:ShortClassName" , "PMD.ShortClassName" })
public class Role {
//The class fields, constructors, methods ...
}
当然,这是有效的,但它会使代码膨胀。基本上,为了与我的两个插件保持一致,我必须两次写(几乎)相同的抑制警告。
所以我的问题如下:有没有办法从PMD的eclipse-pmd插件更改警告名称前缀。到pmd :,那么相同的@SuppressWarnings会抑制Sonar和eclipse-pmd的警告?
答案 0 :(得分:2)
我不相信这是可能的,但您可以摆脱Eclipse PMD插件并使用Eclipse的SonarQube插件。这样你只需要在SonarQube上解决问题(通过注释,或将问题标记为误报)。
答案 1 :(得分:1)
不,无法从“PMD”更改前缀。在eclipse-pmd中的“pmd:”(我知道因为我创建了eclipse-pmd)。
然而,可以仅使用其中一种格式。两种格式存在的原因是Sonar和eclipse-pmd使用不同的规则引擎来分析代码。 eclipse-pmd使用原始的PMD引擎。 Sonar过去常常使用相同的引擎,但几年前他们决定编写自己的引擎并为其引擎重写大多数PMD规则。规则大致相同,但遗憾的是不是100%兼容。 SuppressWarnings格式是其中一种不兼容性。
您必须决定要使用哪个引擎。如果您想使用声纳引擎,请使用SonarQube Eclipse Plugin,当然还要使用声纳。如果您想使用原始PMD引擎,请使用eclipse-pmd和PMD plugin for Sonar(使用PMD引擎代替Sonar引擎作为PMD规则)。
两种方式各有利弊。如果使用Sonar引擎,分析应该更快,特别是如果您还使用Checkstyle和Findbugs规则。然而,SonarSource仍然在重写规则,因此您目前不会拥有PMD(或Checkstyle和Findbugs)中可用的所有规则。