代码之家  ›  专栏  ›  技术社区  ›  Simon

执行类时找不到JAR

  •  4
  • Simon  · 技术社区  · 14 年前

    我正在读一本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 ,尽管我在 类路径 变量。

    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和Java1.620。有人能告诉我发生了什么事吗?为什么解释程序不在我在 类路径 ?

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

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

    这样就行了。但我不想每次执行测试程序时都输入JAR存档。有没有可能告诉口译员他应该自动查看档案?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Brett Kail    14 年前

    我使用的是Windows 7和Java1.620。 有人能告诉我发生了什么事吗?为什么? 口译员会不会看一下 JAR存档我在 CLASSPATH?

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

        2
  •  3
  •   Powerlord    14 年前

    或者,您可以使用 manifest 这告诉它在类路径中包含antlr-3.2.jar。