【问题标题】:Java: how to import a jar file from command lineJava:如何从命令行导入 jar 文件
【发布时间】:2010-10-31 01:33:34
【问题描述】:

我正在尝试使用 Java 从命令行 (Windows) 调用一个类(主方法)。
该类导入其他类(其他 jars)。

我总是从我的主程序导入的类中得到“类未找到异常”。

这是我尝试过的:

  • 添加 CLASSPATH 环境。 var 与引用的库所在的路径(不起作用)

  • 从命令行调用“java -jar myjar.jar”时,我尝试了所有这些不同的参数:“-classpath lib/”、“-classpath ./lib/”、“-classpath lib”、“-cp lib/*”、“@ 987654326@", "-classpath lib/referenced-class.jar", "-classpath ./lib/referenced-class.jar"(lib 是引用的 jar 所在的位置)

  • 我尝试将所有引用的 jar 打包到我的主类所在的 jar 中...

  • 除此之外,我还尝试在 Manifest 文件中指定类: Class-path referenced-jar.jar 我也试过Class-path lib/referenced-jar.jar

【问题讨论】:

    标签: java command-line jar classpath


    【解决方案1】:

    如果您使用 java -jar 运行 jar 文件,则 -classpath 参数 is ignored。您需要在 jar 的清单文件中设置类路径,如下所示:

    Class-Path: jar1-name jar2-name directory-name/jar3-name

    请参阅 Java 教程:Adding Classes to the JAR File's Classpath

    编辑:我看到你已经尝试在清单中设置类路径,但你确定你使用了正确的语法吗?如果您像显示的那样在“Class-Path”之后跳过“:”,它将不起作用。

    【讨论】:

    • 是的,我也尝试使用“:”...我不知道为什么使用 Manifest 来指定那些根本不起作用。我问了同事,并与他们重新检查了所有内容。
    • 非常好奇。我多年来一直这样做,从来没有遇到过问题。您是否正确大写了 Class-Path?我不知道这是否会有所作为......
    • 我觉得这是最好的答案。手动制作恰到好处的清单文件通常是一项艰巨的任务。我通常将 jar 解包并让 Ant 制作另一个。他的路径和资源名称可能超过 72 个字符,如果包装不当会导致问题。
    • 如果您正在处理要运行的第三方 jar,我不会走这条线。改为寻找亚当的答案
    • 这应该是公认的答案。我想知道是否可以从目录中添加所有 jar。使用 dir/*dir/*.jar 不起作用。
    【解决方案2】:

    您可以尝试在 Eclipse 中导出为“可运行的 jar”。我也有问题,当我导出为“jar”时,但是当我导出为“Runnable jar”时我从来没有问题。

    【讨论】:

    • 我在导出窗口中没有看到“Runnable jar”选项,只是一个 JAR 文件 :(
    • 你使用的是哪个版本的eclipse?我有它在 Ganymede....屏幕截图在这里:bufka.ath.cx/dslr/Eclipse-Export.png 但我不知道这是否是默认设置。
    【解决方案3】:

    试试

    java -cp "your_jar.jar:lib/referenced_jar.jar" com.your.main.Main
    

    如果您在 Windows 上,则应使用 ; 而不是 :

    【讨论】:

      【解决方案4】:

      如果您碰巧知道要运行的主类的名称,则可以不使用-jar 命令行参数运行它:

      java -classpath .;myjar.jar;lib/referenced-class.jar my.package.MainClass
      

      如果你使用的是 linux,你应该使用 ":" 而不是 ";"在类路径中。

      【讨论】:

      • 我一直在寻找答案!
      • 为了清楚起见,jar 必须明确地在类路径中。指定 /lib 目录效率低下。
      • 非常感谢,我的第一个 Scala "hello world" jar 还活着 ;-) 作为记录——在 Unix 中你使用 ":" 而不是 ";",如果有更多的 lib jars 你只需添加更多的 jar 文件名,用 ";"/":" 分隔
      • "如果你碰巧知道主类的名字"。您可以通过unzip -p the_jar.jar META-INF/MANIFEST.MF | grep Main-Class 轻松找到
      • 你可以像这样指定目录。 java -classpath .:myjar.jar:lib/* my.package.MainClass
      猜你喜欢
      • 2015-06-13
      • 2018-07-30
      • 1970-01-01
      • 2018-03-20
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2012-06-29
      相关资源
      最近更新 更多