Я работаю с книгой 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-архив каждый раз, когда выполняю свои тестовые программы. Есть ли возможность сообщить переводчику, что он должен автоматически заглянуть в архив?