我正在Jenkins上使用Sonar的PMD插件对我的代码进行静态分析。我还在运行Eclipse的PMD插件(准确地说是Eclipse PMD 1.5(http://marketplace.eclipse.org/content/eclipse-pmd )).
我的问题如下:我想抑制某个PMD警告。假设我想要抑制警告ShortClassName(http://pmd.sourceforge.net/pmd-5.1.1/rules/java/naming.html)在我的班上叫Rule。请看以下示例:
@SuppressWarnings("pmd:ShortClassName")
public class Role {
//The class fields, constructors, methods ...
}
这可以很好地抑制声纳上的警告。但是,它不会抑制eclipse pmd上的警告。要做这样的事,我必须做到以下几点:
@SuppressWarnings({ "pmd:ShortClassName" , "PMD.ShortClassName" })
public class Role {
//The class fields, constructors, methods ...
}
当然,这是可行的,但它增加了代码。基本上,为了与我的两个插件保持一致,我必须(几乎)编写两次相同的抑制警告。
所以我的问题如下:有没有办法将eclipse-pmd插件的警告名称前缀从PMD更改为pmd:,所以相同的@SuppressWarings将抑制来自Sonar和eclipse-pmd的警告?
不,不可能将前缀从“PMD”更改为“pmd:”在eclipse-pmd中(我知道,因为我创建了eclipse-pmd)。
但是,可以只使用其中一种格式。这两种格式存在的原因是Sonar和eclipse pmd使用不同的规则引擎来分析代码。eclipse pmd使用原始pmd引擎。Sonar过去使用相同的引擎,但几年前,他们决定编写自己的引擎,并为引擎重写大多数PMD规则。这些规则基本相同,但不幸的是并非100%兼容。SuppressWarnings格式就是其中之一。
你必须决定使用哪种发动机。如果你想使用Sonar引擎,那么就使用SonarQube Eclipse插件,当然还有Sonar。如果要使用原始的PMD引擎,请使用eclipse PMD和Sonar的PMD插件(PMD规则使用PMD引擎而不是Sonar引擎)。
这两种方法各有优缺点。如果使用声纳引擎,分析应该更快,尤其是如果同时使用Checkstyle和Findbugs规则。SonarSource仍在重写规则,因此您目前无法获得PMD(或Checkstyle和Findbugs)中可用的所有规则。
我不相信这是可能的,但是您可能可以摆脱Eclipse PMD插件,并为Eclipse使用SonarQube插件。这样,您只需在SonarQube上沉默问题(通过注释或将问题标记为假阳性)。
我试图添加eclipse pmd插件最终出现以下错误。 知道哪里出问题了吗?
我正在尝试创建一个自定义规则,用于标记void方法中return语句的使用,例如: 我用以下XPath创建了一个自定义XPath规则: 但是当我将此规则导入Eclipse并对代码运行PMD时,它并没有标记我期望的方法,即与上述描述匹配的方法(包含返回的无效方法)。 有人知道这里有什么问题吗?我的XPath有问题吗?或者可能是别的原因? 我使用v3.2.6的插件,其中包含pmd14-4.2.5.ja
我想抑制一些方法的Sonar lint插件警告,这个问题不是我想要的Intellij SonarLint 2.3-忽略规则。 目前,我必须用SuppressWarnings(“all”)对该方法进行注释,这将抑制所有警告。
3)什么是最佳组合规则集。 我们使用的是Sonarquber5.6.3。 最新的checkstyle需要升级到5.6.4,目前只关注PMD、Findbugs和Sonarway插件。 提前致谢
当我运行mvn pmd:check并将JAVA_HOME设置为jdk 1.8时,这运行平稳。当我将jdk切换到1.7时,我得到以下异常。PMD支持1.7,所以不确定为什么我得到这个错误。 原因:org.apache.maven.plugin.PluginContainerException:执行org.apache.maven.plugins时遇到API不兼容:maven-pmd-plugin:
我正在尝试为我的类禁用几个任意PMD警告。 如何列出要忽略的几个PMD规则?我无法用谷歌找到。 它给出了Eclipse编译时错误: 这是可编译的,但被忽略了 这 结果是 Eclipse配置为接受PMD类型: 不支持@SuppressWarnings("PMD. DoNotCallSystemExit")