java - 执行类时找不到 Jar

标签 java command-line classpath

我正在阅读一本 ANTLR(一种语言处理库)书籍,其中有许多示例应该可以使用命令行轻松编译。

解决问题的一些信息:

antlr-3.2.jar包含库类。我添加了 antlr-3.2.jarCLASSPATH环境变量 (Windows 7) 以及使用 javac 编译类时一切正常。 这是我编译我的程序所执行的:

javac Test.java ExprLexer.java ExprParser.java

Test.java包含我的 main() -方法而ExprLexerExprParser由 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/

相关文章:

svn - 递归删除匹配文件和目录的命令行

java - 当并非层次结构中的所有类型都在过滤后的类路径 url 中时,使用反射查找类的(传递)子类型

java - 使用 CronTrigger 和 MySQL 做调度器时出现 ClassNotFoundException

java - Guava - 缓存一张表并在该缓存上使用 get 方法

C++ 删除命令行

sql - 如何从命令行调用 Oracle SQL 过程?

java - eclipse 中的 log4j2.xml 和 log4j2-test.xml

java - 如何从我的 Controller 减少 if else jungle?

java - 无法从 Spring Boot 应用程序验证 mongodb

java - 程序代码中如何使用String引用字段