我试图在MANIFEST.MF文件的Class-Path
部分中使用绝对路径,但它似乎无法正常工作。
我使用绝对路径的原因是所讨论的库是一个专有的库,我不能自由地重新分发。它安装在公司机器上的常量路径(/ opt / ...)上,所以我使用这个绝对路径是有意义的。
我的清单文件如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Me
Class-Path: /opt/path/to/library.jar
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_102
Main-Class: com.me.Main
程序运行正常(因此正确设置了主类等),但是当我尝试从library.jar
加载一个类时,我得到一个NoClassDefFoundError
。
我尝试在主要方法的开头添加以下代码:
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());
}
但它只打印出我的jar文件的名称。
显然,使用" java -jar"也忽略了$CLASSPATH
系统变量,所以即使这似乎也不是一个选项。
除了将库复制(或sym链接)到我自己的jar的位置之外,还有其他解决方案吗?