【发布时间】:2011-10-09 12:36:57
【问题描述】:
我有一个包含清单文件的 web 应用程序,我在 ant 构建任务期间在其中编写了我的应用程序的当前版本。清单文件已正确创建,但是当我尝试在运行时读取它时,我得到了一些奇怪的副作用。我在清单中读取的代码是这样的:
InputStream manifestStream = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("META-INFFFF/MANIFEST.MF");
try {
Manifest manifest = new Manifest(manifestStream);
Attributes attributes = manifest.getMainAttributes();
String impVersion = attributes.getValue("Implementation-Version");
mVersionString = impVersion;
}
catch(IOException ex) {
logger.warn("Error while reading version: " + ex.getMessage());
}
当我将 eclipse 附加到 tomcat 时,我看到上面的代码有效,但它似乎得到了一个与我预期不同的清单文件,我可以看出这是因为 ant 版本和构建时间戳都不同。然后,我把“META-INFFFF”放在那里,上面的代码仍然有效!这意味着我正在阅读其他一些清单,而不是我的。我也试过了
this.getClass().getClassLoader().getResourceAsStream(...)
但结果是一样的。从运行在 tomcat 中的 webapp 内部读取清单文件的正确方法是什么?
编辑:感谢到目前为止的建议。另外,我应该注意我 am 独立运行 tomcat;我从命令行启动它,然后附加到 Eclipse 调试器中正在运行的实例。应该没什么区别吧?
【问题讨论】:
-
@PascalThivent 的答案是正确的方法。添加一些异常处理以防您的 MANIFEST 不存在(即:IDE)并且它应该是 A1。
-
这个通用方法帮助了我:[stackoverflow.com/a/29103019/3158918]