Запуск Java-программы в подкаталоге - PullRequest
1 голос
/ 10 мая 2011

Пожалуйста, дайте предложения, если мое форматирование неверно, я впервые публикую вопрос здесь. При использовании UNIX у меня возникают проблемы с запуском Java-программы «Master» (расположенной в подкаталоге) из каталога верхнего уровня. Компиляция прекрасно работает с верхнего уровня, но я не могу запустить Java-код с верхнего уровня. Я думаю, что я могу неправильно понимать classpath / флаг classpath. Моя структура каталогов такова: /top-level/src/amsPassageretriever.

Когда я пытаюсь запустить все из каталога верхнего уровня, я получаю следующую ошибку:

user:~/top-level$ javac -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar src/amsPassageretriever/*.java
user:~/top-level$ java -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar src/amsPassageretriever/Master
Exception in thread "main" java.lang.NoClassDefFoundError: src/amsPassageretriever/Master (wrong name: amsPassageretriever/Master)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: src/amsPassageretriever/Master.  Program will exit.

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Аргумент java - это не файл, это полное имя класса внутри classpath (основной класс, который вы хотите выполнить).

Похоже, что класс, который вам нужен, это amsPassageretriever.Master (я предполагаю, что вы сделали опечатку, вызывающую пакет amsPassageretrieve в конце вашего сообщения).

Следовательно, вы должны вызвать:

java -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar amsPassageretriever.Master

Обновление: Если вы хотите, чтобы он работал правильно, когда вы не в src, то вам нужно добавить этот каталог и в ваш classpath:

java -classpath /home/user/top-level/src:/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar amsPassageretriever.Master
0 голосов
/ 10 мая 2011

Вы вводите слова «извлечение» и «извлечение», которые являются двумя разными словами

0 голосов
/ 10 мая 2011

try java amsPassageretrieve.Master, поскольку amsPassageretrieve является пакетом, насколько я вижу

, вам также может понадобиться добавить переменные classpath, если ваш класс требует

...