简体   繁体   中英

Eclipse PMD Can't find basic.xml

When attempting to run for a project in Eclipse/Juno, I am getting this error.

An internal error occurred during: "ReviewCode".
Couldn't find the class Can't find resource rulesets/basic.xml.  Make sure the resource is a valid file or URL or is on the CLASSPATH.  Here's the current classpath: C:\eclipsejuno\eclipse\\plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

Anyone know how I can resolve this problem?

I have seen this problem with the command line version as well. In the latest version the classpath is rulesets/java/basic.xml

It seems they changed the default paths between versions. You either need to manually update your paths in the PMD config, or update to the latest version.

If ".pmd" file exists in your project and referent with ruleset.xml, you can solve your issue choosing between the above solutions.

  1. delete .pmd file
  2. open your ruleset.xml, and your configuration according this sample
<rule ref="rulesets/basic.xml" />

TO

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

The advice with changing rulesets/ to rulesets/java/ helped me, but I had to also change one rule from:

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

to

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

Here is my PMD configuration file from sonar which is working for me with PMD-plugin 4.0.2.:

<?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>

I was getting this error when trying to update Maven project in Eclipse. The problem for me was that I was using two different PMDs, one installed as Eclipse plugin and another one downloaded by Maven from the pom.xml file of a parent project. So what I needed to do was to uninstall Eclipse's PMD plugin and after that didn't get the error anymore.

In my case I have my custom pmdRuleSet.xml and it looks like:

<rule ref="pmd-rulesets/java/codesize.xml/ExcessiveMethodLength">
<properties>
    <property name="minimum" value="10"/>
</properties>

And it throws the error, if I change "pmd-rulesets" to "ruleset", and the path in the pmdRuleSet.xml obviously, then everything is ok.

如果您必须面对复杂的项目设置,则可以使用此行转换每个.pmd文件

find . -name .pmd -exec sed -i.bak 's/rulesets\/basic.xml/rulesets\/java\/basic.xml/g' {} \;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM