无法在Windows中运行PMD

时间:2018-08-23 15:29:21

标签: java pmd

我试图通过运行命令

在Windows中运行一个简单的Java程序
pmd -d path-to-source\com\vaannila\domain\User.java -f text -R java-basic

和出现的错误如下。

  

线程“ main”中的异常java.lang.NoClassDefFoundError:C:\ pmd \ pmd-bin-5 / 4/6 \ bin // \\ lib \ asm-5 / 0/4 / jar       引起原因:java.lang.ClassNotFoundException:C:\ pmd \ pmd-bin-5.4.6 \ bin .. \ lib \ asm-5.0.4.jar               在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)               在java.security.AccessController.doPrivileged(本机方法)               在java.net.URLClassLoader.findClass(URLClassLoader.java:190)               在java.lang.ClassLoader.loadClass(ClassLoader.java:306)               在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)               在java.lang.ClassLoader.loadClass(ClassLoader.java:247)       找不到主类:C:\ pmd \ pmd-bin-5.4.6 \ bin .. \ lib \ asm-5.0.4.jar。程序将退出。

请帮助我运行PMD

1 个答案:

答案 0 :(得分:0)

我无法重现您的问题,也无法完全理解错误消息。

根据错误消息,您已将PMD 5.4.6提取到C:\pmd中,因此目录C:\pmd\pmd-bin-5.4.6存在。在此目录中,有两个子目录:bin-包含pmd.batlib,其中包含要放入类路径的必需jar。

因此,无需进一步配置系统,您就可以在命令外壳中简单地运行C:\pmd\pmd-5.4.6\bin\pmd.bat-您应该看到帮助屏幕(而不是NoClassDefFound异常)。

您可以试试吗?那对你有用吗? 如果不是,请->重新安装PMD,因为您的安装似乎因某种原因被破坏了。

我知道,您仅使用pmd来调用pmd-如果您当前位于目录C:\pmd\pmd-bin-5.4.6\bin中,或者您将此目录添加到PATH环境中,则此方法有效变量。即使我这样做,也不管我在哪个目录中,它都对我有用。

您是否配置了PATH环境变量之类的内容?

我无法理解错误消息-它声称,它找不到名为“ C:\ pmd \ pmd-bin-5 / 4/6 \ bin // \ lib \ asm-5 / 0/4 / jar”。这不是一个类名,它看起来像一个受操纵的类路径-并且还查看正斜杠和后斜杠的混合。错误的下一部分是“ C:\ pmd \ pmd-bin-5.4.6 \ bin .. \ lib \ asm-5.0.4.jar”-虽然看起来是正确的,但缺少斜线-仍然没有意义。错误消息说,找不到主类-但是主类称为net.soureforge.pmd.PMD

作为参考,以下是pmd.bat中的original content

@echo off
set TOPDIR=%~dp0..
set OPTS=
set MAIN_CLASS=net.sourceforge.pmd.PMD

java -classpath %TOPDIR%\lib\* %OPTS% %MAIN_CLASS% %*

您可以将此与您的pmd.bat进行比较吗? 我怀疑您的文件看起来有些不同。

您也可以在没有批处理文件的情况下运行PMD,例如:

java -classpath C:\pmd\pmd-bin-5.4.6\lib\* net.sourceforge.pmd.PMD -d path-to-source\com\vaannila\domain\User.java -f text -R java-basic

对您有用吗?

P.S .:的确,PMD 5.4.6是最后一个在Java 1.6上运行的PMD。但这并不意味着更新版本的PMD无法分析Java 1.6。码。您只需要最近的Java运行时(例如Java 10或11)即可执行PMD,并需要一个单独的JDK来构建您的项目。 PMD可以分析任何版本的Java,而不依赖于它运行的Java版本。