2013-04-05 98 views
11

我想在我的Sonar配置文件的IDE(Eclipse)中使用相同的规则集。无法在Eclipse中导入PMD规则集

我从声纳永久链接的PMD的XML规则集,并希望将其导入到我的PMD Eclipse插件,但是当我尝试这样做,“确定”按钮desactivated ...

Can't import a PMD Ruleset in PMD Eclipse Plugin

有人可以帮我吗?

回答

13

问题可能在于Sonar正在导出v4.x格式的规则集,并且您的Eclipse插件期望它们是v5.x格式。

尝试更改您的规则:

<rule ref="rulesets/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
</rule> 

<rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
</rule> 

请注意:裁判属性。一个简单的查找和替换都可以为你工作。

+0

刚刚与SonarQube 3.7和Eclipse开普勒一起尝试过,它没有奏效。此答案的任何更新? – 2014-02-11 13:04:33

+0

此外,您可能还必须使用下面的Dove和KrishPrabakar答案。此外,以下内容也发生了变化 - 规则UnusedPrivateField,UnusedLocalVariable,UnusedPrivateMethod,UnusedFormalParameter,UnusedModifier从controversial.xml移至unusedcode.xml。规则design.xml/UseSingleton更改为design.xml/UseUtilityClass – 2015-03-13 13:38:37

-1

为什么不使用Sonar Eclipse?您不需要担心规则集的同步。

+1

但是与Sonar Eclipse i吨将花费很长时间来运行完成测试。在这里,我想使用3个人插件(PMD,CheckStyle,Findbugs),因为我可以在特定的软件包上运行它。(感谢您的帮助) – 2013-04-19 08:58:51

+1

嗯,好的...很抱歉,我无法帮助您更多因为PMD Eclipse不在我的范围之内。就像一个信息:我们正在努力改进Sonar Eclipse,以便能够运行增量分析:) – 2013-04-19 10:53:39

+1

这真的是一个很棒的功能!非常感谢您的帮助!在他的IDE(Eclipse)中直接安装声呐“警告”也很有趣。因为在Sonar WebServer上看到一个问题,然后必须在他的IDE中搜索相关的代码行,这真的很无聊...... :-) – 2013-04-19 13:48:28

0

Ivan Nikolov的回答是正确的。你的问题是规则集格式的不同版本。在我的情况下,我试图将从PMD插件版本3.2.6导出的规则集导入插件版本4.0.0。这里是我的发现:

  • Ivan Nikolov提到的路径变化是所有规则都需要的。要小心,因为并不是所有规则都属于java(我也看到了XML的规则,...)。我对PMD并不那么深入,所以我不知道在哪个版本中引入了其他技术的规则。
  • 为了与旧的自定义规则集文件进行比较,导出PMD插件4.0.0的默认规则集非常有用。这样你就可以解决下一个问题。
  • 在你的行为被抛出的异常是不可视化的。该异常可以在工作区日志文件(/.metadata/.log)中看到。这可以给你一个线索,还有什么需要改变。使用上一点来了解如何解决问题。在我的情况下,它被改变路径一个规则从 到

这些变化,我能够导入手动迁移自定义的规则集文件到PMD插件4.0.0之后。

希望这会有所帮助。

BTW:我觉得版本4.0.0 PMD的插件非常错误,所以我降级到3.2.6

3

伊万·尼科洛夫的建议帮助我,但我不得不改变也从一个规则:

<rule ref="rulesets/java/controversial.xml/UnusedModifier"> 
    <priority>5</priority> 
</rule> 

<rule ref="rulesets/java/unusedcode.xml/UnusedModifier"> 
    <priority>5</priority> 
</rule> 

下面是它为我工作与PMD-插件4.0.2声纳我PMD的配置文件。:

<?xml version="1.0" encoding="UTF-8"?> 
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     name="pmd-eclipse" 
     xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> 
    <rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceEnumerationWithIterator"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/CompareObjectsWithEquals"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UseIndexOfChar"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BigIntegerInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/InstantiationToGetClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/coupling.xml/LooseCoupling"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/SingularField"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/CloseResource"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/CollapsibleIfStatements"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UselessOperationOnImmutable"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UselessOverridingMethod"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedModifier"> 
    <priority>5</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/PreserveStackTrace"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/UseArraysAsList"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/EqualsNull"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BrokenNullCheck"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/logging-jakarta-commons.xml/UseCorrectExceptionLogging"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/InefficientStringBuffering"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/sunsecure.xml/ArrayIsStoredDirectly"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/controversial.xml/DontImportSun"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/imports.xml/DontImportJavaLang"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/StringToString"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/SimplifyConditional"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceVectorWithList"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/codesize.xml/NcssMethodCount"> 
    <priority>3</priority> 
    <properties> 
     <property name="minimum" value="50" /> 
    </properties> 
    </rule> 
    <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/codesize.xml/NcssTypeCount"> 
    <priority>3</priority> 
    <properties> 
     <property name="minimum" value="800" /> 
    </properties> 
    </rule> 
    <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/IntegerInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/AvoidAssertAsIdentifier"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/UnnecessaryLocalBeforeReturn"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/BooleanInstantiation"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement"> 
    <priority>2</priority> 
    </rule> 
    <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/ReplaceHashtableWithMap"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/design.xml/IdempotentOperations"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UseStringBufferLength"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/migrating.xml/AvoidEnumAsIdentifier"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/logging-java.xml/SystemPrintln"> 
    <priority>3</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/UselessStringValueOf"> 
    <priority>4</priority> 
    </rule> 
    <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals"> 
    <priority>3</priority> 
    </rule> 
</ruleset> 
+0

这对我来说,非常感谢。 – 2014-03-13 13:03:23

0

除了别人怎么说,你也必须找到这样的:

net.sourceforge.pmd.rules.XPathRule 

并以此替换:

net.sourceforge.pmd.lang.rule.XPathRule 
1

我不得不把语言添加到我的XPath规则也是如此,例如:

<rule name="DontUseDate" language="java" class="net.sourceforge.pmd.lang.rule.XPathRule" ...></rule> 
相关问题