我正在阅读一本 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-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.
我使用的是 Windows 7 和 Java 1.6_20。有人能告诉我发生了什么事吗?为什么解释器不查看我在 CLASSPATH
中指定的 jar-Archive ?
我找到了某种解决方法。我把antlr-3.2.jar复制到Test.class所在目录下执行:
java -cp ./;antlr-3.2.jar Test
这成功了。但我不想每次执行测试程序时都输入 jar-Archive。是否有可能告诉口译员他应该自动查看文件?
最佳答案
I'm using Windows 7 and Java 1.6_20. Can someone tell what is going on? Why will the interpreter not look in the jar-Archive I specified in the CLASSPATH?
-cp 在命令行上覆盖 CLASSPATH 变量。没有方便的方法来做你想做的事情。如果您不想每次都输入完整的类路径,我建议创建一个 ant 脚本、shell 脚本或 shell 别名。
关于java - 执行类时找不到 Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931383/