从命令行运行带有依赖项的 jar

use*_*408 7 java jar

Java 可以像这样从命令行运行 jar 文件:

java -jar foobar.jar
Run Code Online (Sandbox Code Playgroud)

但是,如果foobar.jar取决于,则只要调用 中的baz.jar任何类,上述内容就会抛出异常baz.jar,因为 JVM 无法知道在哪里查找这些类。

但是,手册页(Linux 上的 OpenJDK 8)指出:

使用该-jar选项时,指定的 JAR 文件是所有用户类的来源,其他类路径设置将被忽略。

如果重新打包不是一个选项,有没有办法从命令行运行具有依赖项的 jar 文件?

ern*_*t_k 13

使用 时java -jar,不会在命令行上指定依赖项。您有两种方法可以将 jar 添加到类路径中:

  1. 调用java主类并foobar.jar在命令行上添加 jar 文件,包括您的.

    java -cp foobar.jar:baz.jar com.mycompany.MainClass
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在foobar.jar的清单文件中包含依赖项(然后运行java -jar)

    Class-Path: baz.jar
    
    Run Code Online (Sandbox Code Playgroud)