Pmd ant скрипт выдает java.lang.NoClassDefFoundError: org / jaxen / JaxenException - PullRequest
2 голосов
/ 20 сентября 2011
<?xml version="1.0" encoding="UTF-8"?>
<project name="Example" default="pmd" basedir=".">
<property name="PMD.home" location="D:\Software\Java\pmd-4.2.5"/>
<path id="PMD.lib"> 
    <fileset dir="${PMD.home}\lib"> 
            <include name="*.jar" /> 
    </fileset> 
    <!--pathelement location="${PMD.home}/lib/jaxen-1.1.1.jar" -->
</path> 
<echo>${PMD.home}\lib</echo>
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" > 
    <classpath refid="PMD.lib" /> 
</taskdef> 
<target name="pmd">
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="PMD.lib"    />       
<echo>${PMD.home}\bin\pmd-rules.xml</echo>
<pmd> 
<ruleset>${PMD.home}\bin\pmd-rules.xml</ruleset>
<formatter type="html" toFile="pmd_report_ant9.html"  />
<fileset dir="C:\Documents and Settings\twarsi\eclipse3_5\tw1\Example">
<include name="**\*.java"/>
 </fileset>
 </pmd>
</target>
</project>

Вышеприведенный скрипт ant, который я пытаюсь запустить для запуска PMD ruleset pmd-rules.xml, но получаю сообщение об ошибке ниже.

 pmd:
 [echo] D:\Software\Java\pmd-4.2.5\bin\pmd-rules.xml
  [pmd] Using the normal ClassLoader
  [pmd] Adding classpath entry: <D:\Software\Java\pmd-4.2.5\bin>
  [pmd] Sending a report to file = D:\Software\Java\pmd-4.2.5\bin\pmd_report
  _ant9.html; renderer = html

 BUILD FAILED
 java.lang.NoClassDefFoundError: org/jaxen/JaxenException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at net.sourceforge.pmd.RuleSetFactory.parseSingleRuleNode(RuleSetFactory
  .java:309)
    at net.sourceforge.pmd.RuleSetFactory.parseRuleNode(RuleSetFactory.java:
 253)
    at net.sourceforge.pmd.RuleSetFactory.parseRuleSetNode(RuleSetFactory.ja
 va:209)
    at net.sourceforge.pmd.RuleSetFactory.createSingleRuleSet(RuleSetFactory
.java:135)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSets(RuleSetFactory.java
:85)
    at net.sourceforge.pmd.ant.PMDTask.doTask(PMDTask.java:220)
    at net.sourceforge.pmd.ant.PMDTask.execute(PMDTask.java:334)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
 java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

Не могли бы вы сообщить мне, что у меня естьотсутствует .Даже jaxen-1.1.1.jar есть в каталоге lib. Но он показывает ошибку. Я что-то пропустил в скрипте ant.

Ответы [ 4 ]

1 голос
/ 29 апреля 2013

В pmd 5.0.3 это работает для меня:

<property name="pmd.dir" value="${otherSoftware}/pmd-5.0.3" />
<path id="pmd.classpath">
    <fileset dir="${pmd.dir}\lib"> 
        <include name="*.jar" /> 
    </fileset>
</path>
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath" />
<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" classpathref="pmd.classpath" />

Примечание: pmd-5.0.3 / lib содержит jaxen.jar!

1 голос
/ 10 апреля 2013

Скопируйте все файлы в вашем pmd.home \ lib в ant.home \ lib папку

pmd.home - это ваш каталог pmd: в вашем случае: D: \ Software \ Java \ pmd-4.2.5 ant.home - это ваш домашний каталог ant: Предполагается, что вы используете netbeans, это будет netbeans \ java \ ant

Остерегайтесь дубликатов jar или дубликатов версий (особенно ant).

А затем снова введите команду.Надеюсь, это поможет.

0 голосов
/ 22 сентября 2011

У меня были точно такие же проблемы, с версией 4.2.6. Представляется важным, чтобы JAR-файл jaxen находился в каталоге, где ant ищет специфичные для PMD JAR-файлы. Для меня следующие работы, где все (четыре) файлы jar PMD находятся в $ {pmd.home}.

<property name="pmd.home" value="../../external/pmd" />
<target name="pmd">
    <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${pmd.home}/pmd-4.2.6.jar"/> 

    <pmd shortFilenames="true">
        <ruleset>basic</ruleset>
        <formatter type="xml" toFile="${report.dir}/pmd.xml"/>
        <fileset dir="${src.dir}">
            <include name="**/*.java"/>
        </fileset>
    </pmd>
</target>

Надеюсь, это поможет!

0 голосов
/ 20 сентября 2011

Я думаю, что изменение <!--pathelement location="${PMD.home}/lib/jaxen-1.1.1.jar" --> на <pathelement location="${PMD.home}/lib/jaxen-1.1.1.jar" /> поможет?Или все ваши библиотеки уже загружены?Пожалуйста, попробуйте ant -verbose.

...