我们所有的jar都包含某个文件version.properties
,其中包含构建中的特定信息。
当我们从命令行启动一个jar(在类路径上有几个jar)时,我们希望从访问同一个 jar中的version.properties
。更确切地说:我们想编写Java代码,它为我们提供了调用类文件所在的jar中属性文件的内容。
问题是类路径上的所有jar都包含version.properties
,我们不想读取类路径中的第一个,而是读取正确jar中的第一个。我们怎样才能做到这一点?
答案 0 :(得分:2)
有趣的问题。您必须找到特定jar的代表类的位置,并使用结果来构建属性文件的URL。我使用String.class作为示例攻击了一个示例,并在META-INF中访问MANIFEST.MF,因为rt.jar中没有属性(至少快速jar tf rt.jar | grep properties
导致零结果)
Class clazz = String.class;
String name = clazz.getName().replace('.', '/') + ".class";
System.out.println(name);
String loc = clazz.getClassLoader().getResource(name).toString();
System.out.println(loc);
if (loc.startsWith("jar:file")) {
String propertyResource = loc.substring(0, loc.indexOf('!')) + "!" + "/META-INF/MANIFEST.MF";
InputStream is = new URL(propertyResource).openStream();
System.out.println(propertyResource);
Properties props = new Properties();
props.load(is);
System.out.println(props.get("Implementation-Title"));
}