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

Access properties file in same jar

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

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

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

有趣的问题。您必须找到特定 jar 的代表 class 的位置,并使用结果为属性文件构建 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"));
    }