如何在WAR应用程序中读取MANIFEST.MF?

我想阅读我的WAR应用程序的MANIFEST.MF 。 我怎样才能找到它的文件名?

我怎样才能找到它的文件名?

你已经拥有它了。 也许你想找到绝对的文件位置? 您可以使用ServletContext#getRealPath()

 String relativeWARPath = "/META-INF/MANIFEST.MF"; String absoluteDiskPath = getServletContext().getRealPath(relativeWARPath); File file = new File(absoluteDiskPath); // ... 

或者,如果您想直接将其作为InputStream ,请使用ServletContext#getResourceAsStream()

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

我在每个应用程序中都遇到了同样的问题,并决定在其中创建一个带有实用程序类的组件: jcabi-manifests 。 现在很容易从类路径中的一个可用MANIFEST.MF加载任何属性:

 import com.jcabi.manifests.Manifests; String value = Manifests.read("My-Version"); 

另外,请查看: http : //www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html

有几种方法可以做到,选择的答案仅在您想要读取Servlet / SpringMVC层上的Manifiest文件或您可以访问ServletContext的任何层时才有效。

但是,如果您想在Servlet启动之前读取类似“version”的值,例如在回溯配置或其他情况下,您可能需要执行一些旧的类加载或Manifest文件操作。

我找到了这个github存储库(不是我的),它包含4种不同的方式从Manifest文件中读取信息。 如果ServletContext无法访问您的情况,请检查这些情况。

https://github.com/khmarbaise/version-examples