2012-09-17 2 views
1

Я новичок в java и использовал его в netBeans, но никогда не пытался его компилировать или запускать с терминала. Итак, мой вопрос может выглядеть наивным. У меня есть справочник этой структуры:java.lang.NoClassDefFoundError - запуск java-файла с внешними библиотеками

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 

I кд в 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> 

Я проверил lib и web/WEB-INF/lib/ папки, а также и все необходимые внешние библиотеки (файлы jar) также существуют в этой папке.

Я искал, чтобы найти решение и попробовал пару вещей, но никто из них не работал. Не поймите, как заставить его работать!

BTW, видимо, люди использовали этот пакет раньше, и я просто загрузил его, чтобы использовать его, но пока не удалось.

+0

Вы пытались: java -cp esa-lucene.jar :. – scrappedcola

+0

Я только что попробовал java -cp esa-lucene.jar :. edu.wiki.index.ESAWikipediaIndexer, и это дает мне ту же ошибку. – Toolsa

+0

http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath http://stackoverflow.com/questions/9053146/set-folder-for-classpath-in- java –

ответ

0

Похоже, вы имеете в виду пути к классам Eclipse и .project. В этом случае, почему вы не пытаетесь запустить его в eclipse.

Однако, поскольку здесь вы запускаете его вручную, записи пути к классам в файле pathpath не используются. Также вы можете сообщить нам, где находится файл .class для ESAWikipediaIndexer.java. Если вы выполните команду ниже

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

Из той папки, где она расположена, она должна работать. Также вы должны указать полный путь или относительный путь к esa-lucene.jar в приведенной выше команде.

+0

Когда я пытаюсь скомпилировать ESAWikipediaIndexer вручную дает мне эту ошибку: ESAWikipediaIndexer.java:114: не может найти символ символ: класс WikipediaAnalyzer местоположение: класс edu.wiki.index.ESAWikipediaIndexer \t писатель = новый IndexWriter (indexDir, новый WikipediaAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED); Примечание: ESAWikipediaIndexer.java использует или переопределяет устаревший API. Примечание: перекомпиляция с -Xlint: устаревшие сведения. – Toolsa

+0

есть ли каталог bin, который автоматически создается eclipse? –

+0

№. esa-lucene, который я загрузил подробно, доступен здесь: https://github.com/faraday/wikiprep-esa/tree/master/esa-lucene – Toolsa

0

Как уже упоминалось, вы должны убедиться, что файл ESAWikipediaIndexer.class находится либо в esa-lucene.jar, либо в структуре каталогов edu/wiki/index, локализуемой в каталоге, в котором вы запускаете команду java. Вот что вы можете сделать. загляните в файл 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. Если выход класса есть, добавьте build/classes в свой путь к классам в вашей команде: java -cp build/classes: esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer на Mac/Linux или java -cp build/classes ; esa-lucene.jar edu.wiki.index.ESAWikipediaIndexer в Windows.

Смежные вопросы