运行PMD时,Ant无法找到Objectweb asm类文件

时间:2014-02-13 22:15:32

标签: java ant pmd

我正在尝试使用Ant来运行PMD,但它告诉我它无法找到Objectweb asm类。具体做法是:

  

build.xml:526:java.lang.NoClassDefFoundError:org / objectweb / asm / ClassVisitor

我安装了objectweb-asm软件包,其中包含/usr/share/java/objectweb-asm中的jar文件。我从~/.ant/lib/创建了asm jar文件的符号链接,但这并没有改变任何东西。也没有从/usr/share/java内部对jar文件进行符号链接。

那么,我该如何做到这一点?

我正在使用PMD 4.2.5,Ant 1.8.4和objectweb-asm 3.3.1-7

来自Ant的完整错误消息:

.../build.xml:526: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
    at net.sourceforge.pmd.typeresolution.ClassTypeResolver.<init>(ClassTypeResolver.java:136)
    at net.sourceforge.pmd.typeresolution.TypeResolutionFacade.initializeWith(TypeResolutionFacade.java:15)
    at net.sourceforge.pmd.sourcetypehandlers.JavaTypeHandler$3.start(JavaTypeHandler.java:35)
    at net.sourceforge.pmd.PMD.processFile(PMD.java:118)
    at net.sourceforge.pmd.PMD.processFile(PMD.java:75)
    at net.sourceforge.pmd.PMD.processFile(PMD.java:210)
    at net.sourceforge.pmd.PMD$PmdRunnable.call(PMD.java:469)
    at net.sourceforge.pmd.PMD$PmdRunnable.call(PMD.java:427)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1365)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1315)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1068)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 12 more

1 个答案:

答案 0 :(得分:0)

原来问题是PMD期望主要的Objectweb asm jar文件名为asm-3.3.1.jar,而实际上是asm.jar。一个简单的软链接解决了这个问题。