Jar文件给出了java.lang.NoClassDefFoundError

时间:2013-10-16 10:07:30

标签: java eclipse jar

我有一个Eclipse项目,当我在Eclipse中运行它时运行正常。我在Eclipse中创建了一个Jar文件。但是当我使用以下命令运行它时:

D:\Java\projects\fetch>java -Xss1000m -XX:-UseGCOverheadLimit -Xmx5048m -jar bin\fetch.jar

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: info/monitorenter/cpdetector/io/ICodepageDetector
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: info.monitorenter.cpdetector.io.ICodepageDetector
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more

jar的内容是:

com (folder)
dist (folder)
doc (folder)
lib  (folder, contains all the jars, including the cpdetector jar)
META-INF (folder)
resources (folder)
sources (folder)
.classpath (file)
.project (file)
hibernate.cfg.xml (file)
log4j.xml (file)

.classpath文件的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="D:/Java/projects/boilerpipe-master/target/boilerpipe-core-1.2.2.jar"/>
<classpathentry kind="lib" path="D:/Java/projects/boilerpipe-master/target/boilerpipe-core-1.2.2-jar-with-dependencies.jar"/>
<classpathentry kind="lib" path="lib/jsoup-1.7.2.jar"/>
<classpathentry kind="lib" path="lib/ahocorasick-1.4-SNAPSHOT-all.jar"/>
<classpathentry kind="lib" path="lib/ahocorasick-1.4-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/antlr-3.4-complete.jar"/>
<classpathentry kind="lib" path="lib/chardet.jar"/>
<classpathentry kind="lib" path="lib/commons-fileupload-1.2.2.jar"/>
<classpathentry kind="lib" path="lib/commons-httpclient-3.1.jar"/>
<classpathentry kind="lib" path="lib/commons-io-2.4.jar"/>
<classpathentry kind="lib" path="lib/commons-lang-2.6.jar"/>
<classpathentry kind="lib" path="lib/commons-lang3-3.1.jar"/>
<classpathentry kind="lib" path="lib/commons-validator-1.4.0.jar"/>
<classpathentry kind="lib" path="lib/horrorss-2.2.0.jar"/>
<classpathentry kind="lib" path="lib/jackson-core-2.1.4.jar"/>
<classpathentry kind="lib" path="lib/jackson-core-asl-1.9.12.jar"/>
<classpathentry kind="lib" path="lib/jackson-mapper-asl-1.9.12.jar"/>
<classpathentry kind="lib" path="lib/jdom-1.1.3.jar"/>
<classpathentry kind="lib" path="lib/jdom-2.0.4.jar"/>
<classpathentry kind="lib" path="lib/jericho-html-3.3.jar"/>
<classpathentry kind="lib" path="lib/jline.jar"/>
<classpathentry kind="lib" path="lib/joda-time-2.2.jar"/>
<classpathentry kind="lib" path="lib/lucene-analyzers-3.6.2.jar"/>
<classpathentry kind="lib" path="lib/lucene-core-3.6.2.jar"/>
<classpathentry kind="lib" path="lib/nekohtml-1.9.13.jar"/>
<classpathentry kind="lib" path="lib/rome-1.0.jar"/>
<classpathentry kind="lib" path="lib/tika-app-1.3.jar"/>
<classpathentry kind="lib" path="lib/xerces-2.9.1.jar"/>
<classpathentry kind="lib" path="lib/xstream-1.4.4.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/envers/hibernate-envers-4.2.0.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/jpa/hibernate-entitymanager-4.2.0.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/antlr-2.7.7.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/hibernate-commons-annotations-4.0.1.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/hibernate-core-4.2.0.Final.jar" sourcepath="C:/Users/Nick/.m2/repository/org/hibernate/hibernate-core/4.2.0.Final/hibernate-core-4.2.0.Final-sources.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/hibernate-jpa-2.0-api-1.0.1.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/javassist-3.15.0-GA.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/jboss-logging-3.1.0.GA.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/required/jboss-transaction-api_1.1_spec-1.0.0.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/optional/ehcache/ehcache-core-2.4.3.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/optional/ehcache/hibernate-ehcache-4.2.0.Final.jar"/>
<classpathentry kind="lib" path="lib/hibernate-release-4.2.0.Final/optional/ehcache/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="C:/java/tomcat6/tomcat 6.0.35/lib/mysql-connector-java-5.1.22-bin.jar"/>
<classpathentry kind="lib" path="lib/htmlcleaner-2.4.jar"/>
<classpathentry kind="lib" path="lib/freebase-java-1.0.0.jar"/>
<classpathentry kind="lib" path="lib/javax.mail.jar"/>
<classpathentry kind="lib" path="lib/opencsv-2.3.jar"/>
<classpathentry kind="lib" path="lib/google-api-client-1.14.1-beta.jar"/>
<classpathentry kind="lib" path="lib/google-http-client-1.14.1-beta.jar"/>
<classpathentry kind="lib" path="lib/json-simple-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/json-smart-1.1.jar"/>
<classpathentry kind="lib" path="lib/javatuples-1.2.jar"/>
<classpathentry kind="lib" path="lib/json-path-0.8.1.jar" sourcepath="C:/Users/Nick/.m2/repository/com/jayway/jsonpath/json-path/0.8.1/json-path-0.8.1-sources.jar"/>
<classpathentry kind="lib" path="lib/json-20090211.jar"/>
<classpathentry kind="lib" path="lib/lucene-4.3.0/core/lucene-core-4.3.0.jar"/>
<classpathentry kind="lib" path="lib/lucene-4.3.0/suggest/lucene-suggest-4.3.0.jar"/>
<classpathentry kind="lib" path="lib/solr-core-4.2.1.jar"/>
<classpathentry kind="lib" path="lib/solr-solrj-4.2.1.jar"/>
<classpathentry kind="lib" path="lib/quartz-all-2.1.7.jar"/>
<classpathentry kind="lib" path="lib/simplelatlng-1.2.0.jar"/>
<classpathentry kind="lib" path="lib/obsidian.jar"/>
<classpathentry kind="lib" path="lib/CareerjetAPIClient.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/>
<classpathentry kind="lib" path="lib/goose-2.1.22-jar-with-dependencies.jar"/>
<classpathentry kind="con" path="com.ateji.bldt.ui.ATEJILIB_CONTAINER"/>
<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/httpclient-4.2.3.jar"/>
<classpathentry kind="lib" path="lib/httpcore-4.2.2.jar"/>
<classpathentry kind="lib" path="lib/httpmime-4.2.3.jar"/>
<classpathentry kind="lib" path="lib/commons-codec-1.2.jar"/>
<classpathentry kind="lib" path="lib/commons-math3-3.2.jar" sourcepath="sources"/>
<classpathentry kind="lib" path="lib/guava-14.0.1.jar"/>
<classpathentry kind="lib" path="lib/cpdetector_1.0.10.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

我已经google了java.lang.NoClassDefFoundError,并且已经尝试了很多东西,但它们都没有用。欢迎所有建议。谢谢。

2 个答案:

答案 0 :(得分:5)

在命令行上运行java时,必须提供类路径。

java -cp lib/commons-fileupload-1.2.2.jar;......

或者你在eclipse(Launch Configuration)中运行它,eclipse为你提供了类路径。 .classpath文件是一个eclipse工件,因此只能被eclipse识别。

或者你可以使用 eclipse的runnable jar export Export -> Runnable Jar File。确保在导出对话框的“库处理”部分中选择了“将所需库提取到生成的JAR中”。

答案 1 :(得分:1)

作为jar运行时,需要按如下方式指定类路径:

java -cp libOne.jar;libTwo.jar;... -jar myJar.jar

或者,由于您执行了Eclipse导出,请选择export Runnable Jar。然后,您可以选择Extract required libraries into generated JAR。如果这样做,请确保这些库的许可证允许您执行此操作。然后您不需要指定类路径。

像这样导出的jar更容易使用。