Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行类时未找到Jar_Java_Command Line_Classpath - Fatal编程技术网

Java 执行类时未找到Jar

Java 执行类时未找到Jar,java,command-line,classpath,Java,Command Line,Classpath,我正在阅读一本ANTLR(一种语言处理库)的书,其中有许多示例应该很容易使用命令行编译 获取te问题的一些信息: antlr-3.2.jar包含库类。我将antlr-3.2.jar添加到CLASSPATH环境变量(Windows 7)中,在使用javac编译类时,一切正常。 这是我编译程序时执行的操作: javac Test.java ExprLexer.java ExprParser.java Test.java包含我的main()-方法,而ExprLexer和ExprParser由ANTL

我正在阅读一本ANTLR(一种语言处理库)的书,其中有许多示例应该很容易使用命令行编译

获取te问题的一些信息:

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-3.2.jar
中包含的ANTLR类,尽管我在
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.
我正在使用Windows7和Java1.6_20。有人能告诉我发生了什么事吗?为什么解释器不查看我在
类路径中指定的jar归档文件

我找到了一些变通办法。我将antlr-3.2.jar复制到Test.class所在的目录中,然后执行:

java -cp ./;antlr-3.2.jar Test
这是成功的。但我不想每次执行测试程序时都键入jar归档文件。有没有可能告诉口译员他应该自动查看档案

我正在使用Windows7和Java1.6_20。 有人能告诉我发生了什么事吗?为什么? 口译员不会看电视吗 我在 类路径


-命令行上的cp覆盖CLASSPATH变量。做你想做的事没有方便的方法。如果您不想每次都键入完整的类路径,我建议您创建一个ant脚本、shell脚本或shell别名。

或者,您可以将您的测试应用程序放入自己的jar文件中,并带有一个命令,告诉它在类路径中包含antlr-3.2.jar。

对不起。。。我想把另一个帖子作为答案,但我错误地把你的设置为…:)@西蒙:我刚才看到了,我想这可能是个错误。没有伤害,没有犯规。(我经常发布正确答案的备选方案。)