我有一個包含清單文件的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