加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

无法让java程序运行! NoClassDefFoundError的?

发布时间:2020-12-14 23:34:00 所属栏目:Java 来源:网络整理
导读:我是.NET开发人员,但对于我目前的项目,我需要使用Google Caja,这是一个 Java项目.嗯,哦! 我在Windows机器上按照http://code.google.com/p/google-caja/wiki/RunningCaja的指南,但无法运行程序.他们建议的命令行不起作用,所以我进入ant-jars目录并尝试运行pl
我是.NET开发人员,但对于我目前的项目,我需要使用Google Caja,这是一个 Java项目.嗯,哦!

我在Windows机器上按照http://code.google.com/p/google-caja/wiki/RunningCaja的指南,但无法运行程序.他们建议的命令行不起作用,所以我进入ant-jars目录并尝试运行plugin.jar:

D:javacajasvn-changespristineant-jars>java -cp . -jar pluginc.jar -i test.htm
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
        at com.google.caja.plugin.PluginCompilerMain.<init>(PluginCompilerMain.java:78)
        at com.google.caja.plugin.PluginCompilerMain.main(PluginCompilerMain.java:368)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 2 more

那是怎么回事?

我也尝试过file:/// d:/java/caja/svn-changes/pristine/ant-jars/test.htm而不是test.htm.看来源,似乎文件参数是一个Uri ……

我也尝试在pluginc上运行IKVM,然后不用担心java,但是它也提出了ClassDefNotFoundException ……

谢谢!

编辑:感谢大家的帮助到目前为止:)仍然卡住了.请坚持下去,这可能是.net开发人员转向美丽的OSS技术的开始!

d:javacajasvn-changespristineant-jars>java -cp .*.* com.google.caja.plugin.PluginCompilerMain 
=> NoClassDefFoundError: /commons-cli/jar

D:javacajasvn-changespristineant-jars>java -cp .*.*;..third_partyjavajakarta_commons*.* com.google.caja.plugin.PluginCompilerMain
=> Could not find the main class: com.google.caja.plugin.PluginCompilerMain

鉴于build.xml文件中的代码,有什么方法可以让它运行吗?

解决方法

Java试图加载org.apache.commons.cli.ParseException类,但是找不到它.这表明您没有正确设置类路径.

该特定类来自Apache Commons CLI库,因此请浏览一个名为cli.jar或commons-cli.jar的jar.它可能位于单独的lib目录中.如果在同一个地方有其他罐子,你可能也需要添加它们.

编辑:查看build.xml文件,它使用以下类路径:

<path id="classpath.web">
    <pathelement path="${third_party}/java/jsdk2.1/servlet.jar"/>
    <pathelement path="${third_party}/java/jaf/activation.jar"/>
    <pathelement path="${third_party}/java/javamail/mail.jar"/>
    <pathelement path="${third_party}/java/jetty/lib/jetty.jar"/>
    <pathelement path="${third_party}/java/jetty/lib/jetty-util.jar"/>
  </path>
  <path id="classpath.compile">
    <path refid="classpath.web"/>
    <pathelement path="${third_party}/java/jakarta_commons/commons-cli.jar"/>
    <pathelement path="${third_party}/java/json_simple/json_simple.jar"/>
    <pathelement path="${third_party}/java/rhino/js.jar"/>
    <pathelement path="${third_party}/java/xerces/xercesImpl.jar"/>
    <pathelement path="${jars}/htmlparser.jar"/>
  </path>
  <path id="classpath.run">
    <pathelement path="${lib}"/>
    <path refid="classpath.compile"/>
  </path>

因此,在调用java时,您需要在cp参数中包含所有这些jar.

编辑#2:正如Ash指出的那样,你不能将-cp与-jar一起使用,所以你需要将pluginc.jar放在类路径上并手动指定主类(所以java -cp … ; pluginc.jar com.google.classname -i etc).让蚂蚁工作比手动完成所有这些更容易;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读