我有一个包含清单文件的web应用程序,我在其中编写了我的应用程序的当前版本。清单文件是正确创建的,但是当我在运行时尝试读取它时,我得到了一些奇怪的副作用。我在清单读取代码是这样的:如何读取运行在apache tomcat中的webapp的清单文件?
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());
}
当我附上蚀到tomcat,我看到上面的代码工作,但它似乎变得比我预期的,不同的清单文件,该文件我可以告诉,因为ant版本和构建时间戳都是不同的。然后,我把“META-INFFFF”放在那里,上面的代码仍然有效!这意味着我正在阅读其他清单,而不是我的。我也试过
this.getClass().getClassLoader().getResourceAsStream(...)
但是结果是一样的。从tomcat运行的webapp内部读取清单文件的正确方法是什么?
编辑:感谢您的建议。另外,我应该注意我在am下运行tomcat standalone;我从命令行启动它,然后在Eclipse的调试器中附加到正在运行的实例。这不应该有所作为,应该吗?
@PascalThivent的回答是正确的。如果你的MANIFEST不存在(例如:IDE),那么添加一些异常处理,它应该是A1。 – jmelanson 2013-10-09 19:47:25
这种普遍的方法帮助我: [http://stackoverflow.com/a/29103019/3158918] – user3158918 2015-03-27 17:36:08