Jar не найден при выполнении класса - PullRequest
4 голосов
/ 28 мая 2010

Я работаю с книгой ANTLR (библиотека языковой обработки), и есть много примеров того, что должно легко компилироваться с использованием командной строки.

Некоторая информация для решения проблемы:

antlr-3.2.jar содержит библиотечные классы. Я добавил antlr-3.2.jar в переменную окружения CLASSPATH (Windows 7) и при компиляции классов с помощью javac все работает нормально. Это то, что я выполняю для компиляции моей программы:

javac Test.java ExprLexer.java ExprParser.java

Test.java содержит мой main() -метод, тогда как ExprLexer и ExprParser генерируются ANTLR. Все три класса используют классы, содержащиеся в antlr-3.2.jar. Но пока все хорошо. Как я только что сказал, компиляция работает отлично.

Когда я пытаюсь выполнить Test.class, у меня возникают проблемы. Вот что я печатаю:

java -cp ./ Test

При выполнении этого интерпретатор говорит мне, что он не может найти ANTLR-классы, содержащиеся в antlr-3.2.jar, хотя я добавил запись в переменную CLASSPATH.

Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/runtime/Cha
rStream
Caused by: java.lang.ClassNotFoundException: org.antlr.runtime.CharStream
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Test.  Program will exit.

Я использую Windows 7 и Java 1.6_20. Может кто-нибудь сказать, что происходит? Почему переводчик не заглянет в jar-архив, который я указал в CLASSPATH?

Я нашел какой-то метод работы. Я скопировал antlr-3.2.jar в каталог, где находится Test.class, а затем выполнил:

java -cp ./;antlr-3.2.jar Test

Это сработало. Но я не хочу вводить jar-архив каждый раз, когда выполняю свои тестовые программы. Есть ли возможность сообщить переводчику, что он должен автоматически заглянуть в архив?

Ответы [ 2 ]

5 голосов
/ 28 мая 2010

Я использую Windows 7 и Java 1.6_20. Может кто-нибудь сказать, что происходит? Зачем переводчик не заглядывает в JAR-архив я указал в CLASSPATH

-cp в командной строке переопределяет переменную CLASSPATH. Нет удобного способа сделать то, что вы пытаетесь сделать. Я бы предложил создать сценарий ant, сценарий оболочки или псевдоним оболочки, если вы не хотите каждый раз печатать полный путь к классу.

3 голосов
/ 28 мая 2010

В качестве альтернативы, вы можете поместить ваше тестовое приложение в собственный файл jar с манифестом , который говорит ему включить antlr-3.2.jar в classpath.

...