jar清单中的绝对路径名与相对路径名

时间:2017-12-24 15:38:35

标签: java jar

我想在固定位置引用一个jar文件供多个可执行jar使用,而不是在每个可执行文件中包含该jar。我有以下设置,工作正常

commons-math3-3.6.1.jar存在于目录testgradle中。 TestGradle.jar包含main方法,存在于目录testgradle / build / libs

来自testgradle / build / libs我运行:

java -jar TestGradle.jar

事情很好。 TestGradle.jar中的清单包含:

Manifest-Version: 1.0
Class-Path: ../../commons-math3-3.6.1.jar
Main-Class: com.spgxyz.test.testg

但我想用绝对路径解决commons-math3-3.6.1.jar,以便TestGradle.jar等可执行jar可以从它们所在的目录中使用它。但是,如果我将TestGradle.jar清单更改为包括完整路径:

Manifest-Version: 1.0
Class-Path: C:\Users\Admin\workspace\TestGradle\commons-math3-3.6.1.ja
 r
Main-Class: com.spgxyz.test.testg

然后命令:

java -jar TestGradle.jar

从testgradle / build / libs运行产生:

Error: Could not find or load main class com.spgxyz.test.testg
Caused by: java.lang.ClassNotFoundException: com.spgxyz.test.testg

我尝试对清单进行各种编辑以试图解决这个问题,例如:

Manifest-Version: 1.0
Class-Path: . C:\Users\Admin\workspace\TestGradle\commons-math3-3.6.1.
 jar
Main-Class: com.spgxyz.test.testg

Manifest-Version: 1.0
Class-Path: TestGradle.jar C:\Users\Admin\workspace\TestGradle\commons
 -math3-3.6.1.jar
Main-Class: com.spgxyz.test.testg

这两者都会产生相同的错误。如果有人能够对这里发生的事情有所了解,我将非常感激。在Windows上运行。

1 个答案:

答案 0 :(得分:3)

Class-Path属性被解释为URL列表,因此,要使用绝对路径(在此处用URL表示),它应该以schema开头并使用正斜杠。

尝试以下方法:

Class-Path: file:///C:/Users/Admin/workspace/TestGradle/commons-math3-3.6.1.jar