如何在其 jar 依赖项中读取 war 文件清单?

How to read war-file manifest in its jar-dependency?

如何在其 jar 依赖项中读取 war 文件清单 属性?

UPD:此处未使用 servlet(它是 spring-bean 初始化代码)。

由于 .war 文件的目的是处理 servlet,我假设您的所有代码都是从 servlet 或从基于 servlet 的技术(如 JSP、JSF,甚至Spring.

调用当前请求的ServletContext的getServletContext() method, and use the getResource or getResourceAsStream方法。这些方法的工作方式与 java.lang.Class 的方法相同,只是它们在搜索 Web 应用程序的类路径以查找匹配路径之前先查看 .war 文件本身。

例如:

public Optional<Manifest> getWarManifest(ServletRequest request)
throws IOException {

    InputStream manifest =
        request.getServletContext().getResourceAsStream(
            "/META-INF/MANIFEST.MF");

    if (manifest == null) {
        return Optional.empty();
    }

    try (InputStream stream = new BufferedInputStream(manifest)) {
        return Optional.of(new Manifest(stream));
    }
}

更新:

由于在准备Spring bean时要阅读manifest,出现:

@Configuration
public class MyAppConfig {
    @Bean
    public MyBean createMyBean(@Autowired ServletContext context)
    throws IOException {

        Optional<Manifest> manifest;

        InputStream source =
            context.getResourceAsStream("/META-INF/MANIFEST.MF");

        if (source == null) {
            manifest = Optional.empty();
        } else {
            try (InputStream stream = new BufferedInputStream(source)) {
                manifest = Optional.of(new Manifest(stream));
            }
        }

        return new MyBean(manifest);
    }
}