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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:UsersAdminworkspaceTestGradlecommons-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:UsersAdminworkspaceTestGradlecommons-math3-3.6.1.
 jar
Main-Class: com.spgxyz.test.testg

Manifest-Version: 1.0
Class-Path: TestGradle.jar C:UsersAdminworkspaceTestGradlecommons
 -math3-3.6.1.jar
Main-Class: com.spgxyz.test.testg

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

答案

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

请尝试以下方法:

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

以上是关于jar清单中的绝对路径名与相对路径名的主要内容,如果未能解决你的问题,请参考以下文章

Web应用中相对路径与绝对路径

java里绝对路径和相对路径的区别是啥?

绝对路径和相对路径的区别?

相对路径与绝对路径的含义

C#中怎么用绝对路径?

HTML中的绝对路径与相对路径