java.lang.NoClassDefFoundError - 使用外部库运行java文件

时间:2012-09-17 21:43:08

标签: java classpath

我是java的新手并且已经在netBeans中使用它,但从未尝试过编译或从终端运行它。所以,我的问题可能看起来很幼稚。我有一个这种结构的目录:

Folder X包含: 几个文件和一个名为esa-lucene的文件夹。

esa-lucene是一个包含三个文件夹src, lib, web的目录:

.classpath, lib, .project, .settings, src, web

我试图运行一个存在于这个子目录中的java文件“ESAWikipediaIndexer.java”:

X/esa-lucene/src/edu/wiki/index/ESAWikipediaIndexer.java

我进入Folder X并使用它:

java -cp esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer

但它给了我这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: edu/wiki/index/ESAWikipediaIndexer
Caused by: java.lang.ClassNotFoundException: edu.wiki.index.ESAWikipediaIndexer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: edu.wiki.index.ESAWikipediaIndexer. Program will exit.

我也检查了.classpath,它包含:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="lib/servlet-api.jar"/>
    <classpathentry kind="lib" path="web/WEB-INF/lib/lucene-analyzers-3.0.0.jar"/>
    <classpathentry kind="lib" path="web/WEB-INF/lib/lucene-core-3.0.0.jar"/>
    <classpathentry kind="lib" path="web/WEB-INF/lib/mysql-connector-java-5.1.12-bin.jar"/>
    <classpathentry kind="lib" path="web/WEB-INF/lib/trove-2.1.0.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

我也检查了libweb/WEB-INF/lib/文件夹,所有必需的外部库(jar文件)也存在于此文件夹中。

我搜索找到任何解决方案,并尝试了几件事,但没有一个工作。不知道如何使它工作!

BTW,显然人们之前使用过这个软件包,我刚刚下载使用它,但到目前为止还没有成功。

2 个答案:

答案 0 :(得分:0)

看起来你指的是Eclipse classpath和.project文件。这就是为什么你不尝试在eclipse中运行它。

但是,由于此处您手动运行它,因此未使用类路径文件中的类路径条目。您也可以告诉我们ESAWikipediaIndexer.java的.class文件的位置。如果您运行以下命令

  

java -cp * / esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer

从它所在的目录,它应该工作。 您还需要在上面的命令中提供esa-lucene.jar的完整路径或相对路径。

答案 1 :(得分:0)

正如其他人所提到的,您需要确保ESAWikipediaIndexer.class文件位于esa-lucene.jar中,或者位于运行java命令的目录中的edu / wiki / index文件夹结构中。这是你可以做的。查看jar文件以确保其中存在edu / wiki / index文件夹结构。您可以使用jar -tvf esa-lucene.jar,或者如果您在Windows上将esa-lucene.jar复制到esa-lucene.zip并双击它以将其打开。如果那不是您的ESAWikipediaIndexer.class的位置,那么它可能位于项目根目录下的bin,build,classes或target文件夹中。许多IDE输出到类似构建/类的东西。如果类输出在那里,那么在上面的命令中将构建/类添加到类路径中,如:java /cp build / classes:esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer on Mac / Linux或java -cp build / classes ; Windows上的esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer。