运行java -jar时包含外部jar

rou*_*ble 38 java jar manifest.mf classpath

从我的读数来看,执行命令时如下:

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

然后忽略主类路径,并从清单文件中获取类路径.

此外,还会忽略在命令行上声明的类路径.所以在:

java -classpath /usr/local/jar/foobar.jar -jar foo.jar
Run Code Online (Sandbox Code Playgroud)

/usr/local/jar/foobar.jar被忽略.

最后,我已经读过清单文件只能在jar文件中包含相对路径.

那么,如何包含系统中存在的外部jar的绝对路径,而不是正在执行的jar文件中?

mat*_*t b 40

你是否有理由避免像主要类一样调用主类

java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname
Run Code Online (Sandbox Code Playgroud)

这种类型的调用允许您将绝对路径与相对路径混合.将其放入shell脚本或批处理文件中,以避免实际输入或记住完整的类路径以简化操作.

  • 在某些情况下使用`-jar`会非常容易,但如果您发现简化选项会给您带来麻烦,那么回退到可以完全控制的选项总是有意义的 (4认同)

Gau*_*ish 39

您可以在拥有jar文件的文件夹中创建一个文件夹,比如lib.

Manifest.MF内容可以是:

Main-Class: com.mastergaurav.test.app.MainClass
Class-Path: lib/one.jar lib/two.jar
Run Code Online (Sandbox Code Playgroud)

文件夹内容:

mainFolder/
   * lib/one.jar
   * lib/two.jar
   * my-main.jar
Run Code Online (Sandbox Code Playgroud)

执行:

java -jar my-main.jar
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果执行java -cp/addtional/class/path -jar abcd.jar,则不会忽略addtional类路径. (3认同)
  • 你完全不知道我已经搜索了多久.谢谢. (3认同)