2010-05-28 6 views
4

ANTLR (언어 처리 라이브러리) 설명서를 통해 작업 중이며 으로 커맨드 라인을 사용하여 쉽게 컴파일해야한다는 많은 예제가 있습니다. 클래스를 실행할 때 Jar를 찾을 수 없습니다.

일부 정보

테 문제를 얻을 수 있습니다 :

antlr-3.2.jar 라이브러리 클래스가 포함되어 있습니다. 나는 antlr-3.2.jarCLASSPATH 환경 변수 (Windows 7)에 추가했고, javac으로 클래스를 컴파일하면 모든 것이 잘 동작한다. 이 내가 내 프로그램을 컴파일하기 위해 실행할 것입니다 :

javac Test.java ExprLexer.java ExprParser.java 

Test.javamain() -method ExprLexerExprParser 반면이 ANTLR에 의해 생성되는 포함

. 세 클래스 모두 antlr-3.2.jar에 포함 된 클래스를 사용합니다. 그러나 지금까지 그렇게 좋았습니다. 방금 말했듯이, 컴파일은 잘 작동합니다.

내가 문제가되는 Test.class을 실행하려고 할 때입니다.

java -cp ./ Test 

이를 실행하는 인터프리터 내가 CLASSPATH 변수에 항목을 추가 입력해도 그가의 antlr-3.2.jar에 포함 된 ANTLR - 클래스를 찾을 수없는 것을 저에게 말한다 : 이 내가 입력 한 내용입니다.

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을 사용하고 있습니다. 누군가가 무슨 일이 일어나는지 말할 수 있습니까? 왜 통역사는 병을 들여다 보지 않을 것인가? CLASSPATH에 지정된 보관소?

나는 일종의 일터 워크를 발견했습니다. antlr-3.2.jar를 Test.class가있는 디렉토리에 복사 한 후 실행했습니다.

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

이 방법으로 문제가 해결되었습니다. 하지만 테스트 프로그램을 실행할 때마다 jar-Archive를 입력하지 않으려 고합니다. 통역사에게 자동으로 아카이브를 조사해야한다고 말할 가능성이 있습니까?

답변

5

Windows 7 및 Java 1.6_20을 사용하고 있습니다. 누군가가 무슨 일이 일어나는지 말할 수 있습니까? 왜 CLASSPATH에 지정되어있는 jar-archive에서 보지 않는 통역사가 있습니까?

-cp는 CLASSPATH 변수를 대체합니다. 당신이하려는 일을하는 편리한 방법이 없습니다. 때마다 전체 클래스 경로를 입력하지 않으려면 ant 스크립트, 쉘 스크립트 또는 셸 별칭을 만드는 것이 좋습니다.

+0

아! :) 감사! – Simon

3

또는 테스트 응용 프로그램을 manifest이라는 자체 jar 파일에 넣으면 클래스 경로에 antlr-3.2.jar가 포함되도록 지시 할 수 있습니다.

+0

죄송합니다 ... 나는 다른 게시물을 답으로 설정하고 싶었지만 실수로 설정했습니다 ... :) – Simon

+0

@ 시몬 : 이전에 그걸 보았을 때 실수라고 생각했습니다. 아무런 해가 없으며 파울도 없습니다. (필자는 올바른 답변을 대체로 게시합니다.) – Powerlord

관련 문제