【问题标题】:Why does my IDE find the JAR but my command line doesn't? [duplicate]为什么我的 IDE 能找到 JAR 而我的命令行却没有? [复制]
【发布时间】:2013-01-28 07:47:20
【问题描述】:

我已经尝试四处搜索,但找不到任何适合我的情况的答案。

当我使用 IDE 时,我可以很好地运行文件 CB.java。该文件依赖于 cs2.jar 中指定的类。这是其目录的内容。

02/12/2013  03:43 PM    <DIR>          .
02/12/2013  03:43 PM    <DIR>          ..
02/12/2013  03:45 PM             2,226 CB.class
02/12/2013  01:21 PM             2,164 CB.java
02/12/2013  03:43 PM            71,128 cs2.jar
               3 File(s)         75,518 bytes
               2 Dir(s)  408,977,362,944 bytes free

当我从我的 IDE 运行它时,CB.java 工作得很好。但是,当我在命令行中尝试 java CB 时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: sn/visual/JRect
angle
Caused by: java.lang.ClassNotFoundException: sn.visual.JRectangle
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: CB.  Program will exit.

此外,我尝试按照以下建议向类路径添加一些内容:

>java -cp C:\Users\...blah blah blah...\Software_Engineering cs2
Exception in thread "main" java.lang.NoClassDefFoundError: cs2
Caused by: java.lang.ClassNotFoundException: cs2
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: cs2.  Program will exit.

为什么我的 IDE 很智能,而我的命令行却不智能?

谢谢。

【问题讨论】:

  • 你检查你的类路径了吗?是否将点(“.”)添加到环境变量中的类路径条目中?点表示运行命令的当前目录。如果将其添加到类路径中,则每次运行命令时都不必包含“-cp”(假设 jar 文件也在同一目录中)

标签: java command-line jar classpath


【解决方案1】:

类路径设置为仅考虑给定目录中的.class 文件。需要将jar文件添加到类路径:java -cp C:\somewhere\cs2.jar

【讨论】:

  • 我刚输入&gt;java -classpath C:\blahblahblah\software_engineering\cs2.jar得到Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) .................etc..................
  • java -classpath C:\blahblahblah\software_engineering\cs2.jar CB 将是完整的调用(您需要指定包含 main 方法的类,在您的情况下是 CB)。
【解决方案2】:

为什么我的 IDE 很智能,而我的命令行却不智能?

我怀疑在您的 IDE 中,您已将 jar 文件包含在构建路径中,因此它会在构建和运行时包含它。 (你还没有告诉我们它是哪个 IDE,所以很难使用它会使用的确切术语)

在命令行上,你需要在构建和运行时指定jar文件,所以你会使用:

构建:

javac -cp cs2.jar CB

运行:

java -cp .;cs2.jar CB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-07
    • 2023-01-11
    • 2014-01-30
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多