【问题标题】:Adding jar to classpath when running from command line从命令行运行时将 jar 添加到类路径
【发布时间】:2016-10-08 07:27:52
【问题描述】:

好的,我知道这个问题之前已经被问过很多次了,但是我在过去一个月里用谷歌搜索了它并查看了示例并查看了关于 SO 的问题,但我真的无法让它发挥作用。我认为问题在于我希望能够从 Eclipse 和命令行运行该程序。我也在使用 OSX,我认为我正在阅读的很多示例都是针对 Windows/Linux 的。

如果我有一个在 Eclipse 中编译的简单程序,我想从命令行运行,我会这样做:

java -cp bin MyProgram

我在 Eclipse 中编译和运行了另一个程序,它引用了存储在同一目录中的 MySQL JDBC 连接器 (mysql-connector-java-5.1.19-bin.jar)。这在 Eclipse 中运行良好,但我无法从命令行运行它。

我已经尝试了所有的组合......

java -classpath "bin;mysql-connector-java-5.1.19-bin.jar" MyProgram
java -cp bin\;mysql-connector-java-5.1.19-bin.jar MyProgram

并得到各种类未找到错误...

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram
Caused by: java.lang.ClassNotFoundException: MyProgram
    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:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

【问题讨论】:

  • 嗨,马特,如果我没记错的话,我认为类路径是声明要执行的主类的路径。所以在这种情况下,如果你的类在 bin 文件夹中,我会尝试:java MyProgram 或 java -cp myprogrampath MyProgram
  • @FedericoGiust 不具体; classpath 只是定义了一个档案或一组类的路径。类路径可能包含也可能不包含可运行类(这通常会导致异常或直接 java.exe 错误)。类路径可以包含没有可运行类的目录和档案。

标签: java classpath


【解决方案1】:

您的问题是您使用的最小分隔符。分隔符; 用于 Windows。在 Unix 系统上,您应该改用 :

java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" 我的程序

【讨论】:

    【解决方案2】:

    在 Unix 系统上使用 ':' 分隔您的条目:

    java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" MyProgram
    java -cp bin:mysql-connector-java-5.1.19-bin.jar MyProgram
    

    Eclipse 会自动转换它。

    【讨论】:

    • 转义冒号有什么原因吗?
    【解决方案3】:

    见:

    String pathSeparator = System.getProperty("path.separator");
    

    【讨论】:

      【解决方案4】:

      你没有在classpaht中设置你的主类,尝试在-cp中添加./

      【讨论】:

      • 我怀疑当前目录是否包含它的主类,我相信'bin'包含那些。
      • MyProgram 必须设置到类路径中,如果你将MyProgram 放入包中,还需要添加包名。
      • 别担心,我对类路径和完全限定名了如指掌。我只是说如果他的类位于 bin 目录中,则将当前目录添加到类路径中是没有用的。
      • @GuillaumePolet 在这种情况下,如果我不想在 -cp 选项前指定 jar 名称,解决方案是什么。有什么解决方案我可以在类路径中定义当前目录,并且它的所有 jar 都在类路径中。
      • @Vipin 你总是可以使用通配符的东西(从 Java6 开始): -cp .;./*.jar 或在 Unix/Linux 上 .:./*.jar (小心 Shell 扩展)
      【解决方案5】:

      我强烈建议您尝试 --jar 或 -jar。我不记得是哪个,但那些应该解决你。另外,如果你有苹果的开发工具,他们有一个 jar 打包器。

      【讨论】:

      • 它是-jar,但显然他的课程并没有乱七八糟。忘掉上个世纪的 Apple 开发工具吧。 Eclipse、NetBEans 和 IntelliJ 遥遥领先。
      • @GuillamePolet Agrred,但我只提到他们为他们提供了一个用于从 jar 生成应用程序的实用程序
      猜你喜欢
      • 2014-04-04
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2014-08-31
      • 1970-01-01
      相关资源
      最近更新 更多