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

java.lang.NoClassDefFoundError-使用外部库运行java文件,java,classpath,Java,Classpath,我是java新手,曾在netBeans中使用过它,但从未尝试从终端编译或运行它。所以,我的问题可能看起来很幼稚。我有一个这种结构的目录: 文件夹X包含: 两个文件和一个名为esa lucene的文件夹 esa lucene是一个包含三个文件夹src、lib和web的目录: 我正在尝试运行一个java文件ESAWikipediaIndexer.java,该文件存在于以下子目录中: X/esa-lucene/src/edu/wiki/index/ESAWikipediaIndexer.java 我

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

文件夹X包含: 两个文件和一个名为esa lucene的文件夹

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

我正在尝试运行一个java文件ESAWikipediaIndexer.java,该文件存在于以下子目录中:

X/esa-lucene/src/edu/wiki/index/ESAWikipediaIndexer.java
我将cd刻录到文件夹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>
我已经检查了lib和web/web-INF/lib/文件夹,所有需要的外部库jar文件也都存在于这个文件夹中

我试图找到任何解决办法,并尝试了几件事,但没有一件奏效。我不知道该怎么做


顺便说一句,显然人们以前使用过这个软件包,我也只是下载使用它,但到目前为止还没有成功。

看起来您指的是Eclipse类路径和.project文件。既然如此,为什么不尝试在eclipse中运行它呢

然而,由于您在这里手动运行它,所以类路径文件中的类路径条目没有被使用。您还可以告诉我们WikipediaIndexer.java的.class文件在哪里。如果您运行下面的命令

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

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

看起来您指的是Eclipse类路径和.project文件。既然如此,为什么不尝试在eclipse中运行它呢

然而,由于您在这里手动运行它,所以类路径文件中的类路径条目没有被使用。您还可以告诉我们WikipediaIndexer.java的.class文件在哪里。如果您运行下面的命令

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

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

正如其他人所提到的,您需要确保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输出到构建/类之类的东西。如果有类输出,则在上面的命令中将build/classes添加到类路径中,例如:java-cp build/classes:esa-lucene.jar edu.wiki.index.esawikiediaIndexer(在Mac/Linux上)或java-cp build/classes;Windows上的esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer。

正如其他人所提到的,您需要确保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输出到构建/类之类的东西。如果有类输出,则在上面的命令中将build/classes添加到类路径中,例如:java-cp build/classes:esa-lucene.jar edu.wiki.index.esawikiediaIndexer(在Mac/Linux上)或java-cp build/classes;Windows上的esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer。

您尝试过:java-cp esa-lucene.jar:。我刚刚尝试过java-cp esa-lucene.jar:。edu.wiki.index.ESAWikipediaIndexer,它给出了相同的错误@如果我正确理解NoClassDefFoundError,我认为问题不在于查找外部库。我想,我没有正确调用提到的java文件。是的,10次中有9次,NoClassDefFoundError表明您的jar搜索路径存在某种问题。这可能是完全缺少类,也可能是某种类型的版本不匹配。在这种情况下,看起来类只是简单地丢失了,尽管有时ClassNotFoundException可能具有欺骗性。您是否尝试过:java-cp esa lucene.jar:。我刚刚尝试过java-cp esa lucene.jar:。edu.wiki.index.ESAWikipediaIndexer,它给出了相同的错误@阿尔文-如果我正确理解NoClassDefFoundError,我认为问题不在于找到外部库
锿。我想,我没有正确调用提到的java文件。是的,10次中有9次,NoClassDefFoundError表明您的jar搜索路径存在某种问题。这可能是完全缺少类,也可能是某种类型的版本不匹配。在这种情况下,类似乎完全丢失了,尽管有时ClassNotFoundException可能具有欺骗性。当我尝试手动编译ESAWikipediaIndexer时,它会给我以下错误:ESAWikipediaIndexer.java:114:找不到符号符号:class WikipediaAnalyzer位置:class edu.wiki.index.ESAWikipediaIndexer writer=newIndexWriterindexDir,新WikipediaAnalyzer,true,IndexWriter.MaxFieldLength.LIMITED;注意:ESAWikipediaIndexer.java使用或覆盖不推荐使用的API。注意:使用-Xlint:deprecation重新编译以获取详细信息。是否有一个由eclipse自动创建的bin目录?否。我详细下载的esa lucene在这里可用:尝试将下载的代码basee作为文件->导入->现有项目导入工作区导入eclipse。和r提供下载代码的顶级目录。我使用了netBeans,并将其作为eclipse项目导入,结果成功了。谢谢当我尝试手动编译ESAWikipediaIndexer时,它会给我以下错误:ESAWikipediaIndexer.java:114:找不到符号符号:class WikipediaAnalyzer位置:class edu.wiki.index.ESAWikipediaIndexer writer=new IndexWriterindexDir,new WikipediaAnalyzer,true,IndexWriter.MaxFieldLength.LIMITED;注意:ESAWikipediaIndexer.java使用或覆盖不推荐使用的API。注意:使用-Xlint:deprecation重新编译以获取详细信息。是否有一个由eclipse自动创建的bin目录?否。我详细下载的esa lucene在这里可用:尝试将下载的代码basee作为文件->导入->现有项目导入工作区导入eclipse。和r提供下载代码的顶级目录。我使用了netBeans,并将其作为eclipse项目导入,结果成功了。谢谢
<?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>