在同一个jar中访问属性文件

时间:2017-09-01 13:06:19

标签: java jar properties classpath

我们所有的jar都包含某个文件version.properties,其中包含构建中的特定信息。

当我们从命令行启动一个jar(在类路径上有几个jar)时,我们希望从访问同一个 jar中的version.properties。更确切地说:我们想编写Java代码,它为我们提供了调用类文件所在的jar中属性文件的内容。

问题是类路径上的所有jar都包含version.properties,我们不想读取类路径中的第一个,而是读取正确jar中的第一个。我们怎样才能做到这一点?

1 个答案:

答案 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"));
    }