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

时间:2015-11-02 15:28:05

标签: java servlets war manifest.mf

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

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

我可以使用

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

并迭代它们。但是,我不知道哪一个是我的 - 我甚至不知道Implementation-Title,因为这是由构建管道生成的。 (我可以通过构建管道的知识来猜测,因此我知道正确的清单就在那里。但是,我无法猜测生产代码。)

当然,

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

从类路径上的其他jar中返回一个完全错误的清单。

我也试过

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

但它返回null。

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

1 个答案:

答案 0 :(得分:3)

  

我也试过

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

但它返回null。

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

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

使用ClassLoader#getResourceXxx()没有意义,因为WAR自己的清单文件不在classpath中。它位于webroot中,位于/WEB-INF旁边。因此,ServletContext#getResourceXxx()是唯一的方式。