我的清单文件的Class-Path条目中有一个带有两个jar的可运行jar:
Class-Path: module1-0.0.1-SNAPSHOT.jar base-0.0.1-SNAPSHOT.jar
Main-Class: test.MySPI
程序运行正常,并且满足引用的jar中的所有依赖项。但是,当我尝试访问类路径时,jar不存在:
String classpath = System.getProperty("java.class.path");
String[] entries = classpath.split(System.getProperty("path.separator"));
for (String entry : entries) {
System.out.println("Entry: " + entry);
}
仅提供
Entry: .\module2-0.0.1-SNAPSHOT.jar
有没有办法访问实际的类路径,因为很明显,系统会在路径上找到这些jar?
答案 0 :(得分:5)
我认为您需要使用Manifest类来读取MANIFEST.MF文件并使用该类提取Class-Path属性
答案 1 :(得分:3)
您确实需要JAR文件的位置,还是只需要从中加载资源?
如果您实际上只是想加载资源,那么您会对java.lang.ClassLoader
,静态getSystemClassLoader()
方法和静态java.lang.Thread.currentThread().getContextClassLoader()
方法感兴趣。
如果你想找到它们是什么,因为你想要从Jar文件名中读取版本字符串......如果它们在你的控制下无论如何......你可能想要使用Package.getPackage("my.package").getImplementationVersion()
并组织将所需的值写入组件jar的清单中。