我正在尝试在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文件?
答案 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()
是唯一的方式。