【问题标题】:Reading own MANIFEST.MF in Java servlet [duplicate]在 Java servlet 中读取自己的 MANIFEST.MF [重复]
【发布时间】:2016-02-02 13:03:57
【问题描述】:

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

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

我可以使用

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

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

当然,

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

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

我也试过

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

但它返回一个空值。

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

【问题讨论】:

  • 您打算读取哪些清单属性?其中许多都可以通过现有的 Java SE 方法获得。
  • VGR +1,获取版本例如:String version = getClass().getPackage().getImplementationVersion();
  • 以上 cmets 不适用于 WAR 自己的 manifest,因此是错误的。
  • @BalusC 你是对的。我忽略了他想要 .war 文件的清单。可能应该编辑标题以澄清这一点。
  • 当然。但是在 WEB-INF/classes 和 WEB-INF/lib 下的每个 .jar 中都可以有一个清单。

标签: java servlets war manifest.mf


【解决方案1】:

我也试过了

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

但它返回一个空值。

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

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

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

【讨论】:

  • 这很有帮助。我只是不明白如何通过 this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF"); 读取所有清单。也没有失败。
  • 不客气。那些来自类路径而不是来自网络内容。其他规则适用。另见 a.o. stackoverflow.com/questions/2161054/…
猜你喜欢
  • 1970-01-01
  • 2018-07-23
  • 2023-04-01
  • 2013-07-22
  • 2016-04-19
  • 2011-04-23
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
相关资源
最近更新 更多