我如何从manifest的Class-Path-entries中获取jar

时间:2011-01-04 09:41:39

标签: java classpath manifest

我的清单文件的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?

2 个答案:

答案 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的清单中。