在 Java servlet 中读取自己的 MANIFEST.MF

Reading own MANIFEST.MF in Java servlet

我正在尝试读取 Java servlet 中自己的 MANIFEST.MF 资源。我的情况:我在 EAR 中有一个 WAR(带有我想阅读的清单)。 EAR 中还有其他几个 WARs 和 JAR。 class路径真的很长。

我尝试了几种在 Web 上找到的方法,包括 Whosebug。

我可以使用

读取所有MANIFEST.MF个文件
this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");

并遍历它们。但是,我不知道哪个是我的——我什至不知道 Implementation-Title,因为它是由构建管道生成的。 (我可以根据构建管道的知识进行猜测,因此我知道那里有正确的清单。但是,我无法在生产代码中进行猜测。)

当然,

this.getClass().getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF");

returns 来自 class 路径上其他 jar 的完全错误的清单。

我也试过了

this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF");

但它 returns 为空值。

如何访问属于包含当前 运行 servlet 的 WAR 的 MANIFEST.MF 文件?

I also tried

this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF");

but it returns a null.

该路径必须以 / 开头才能表示绝对 WAR 资源路径。

this.getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");

使用 ClassLoader#getResourceXxx() 没有意义,因为 WAR 自己的清单文件不在类路径中。它位于 webroot 中,紧挨着 /WEB-INF 等等。所以,ServletContext#getResourceXxx()是唯一的办法。