Tôi có một ứng dụng web có chứa tệp kê khai, trong đó tôi viết phiên bản hiện tại của ứng dụng của tôi trong tác vụ tạo kiến. Tệp kê khai được tạo chính xác, nhưng khi tôi cố gắng đọc nó trong thời gian chạy, tôi nhận được một số tác dụng phụ lạ. Mã của tôi để đọc trong biểu hiện là một cái gì đó như thế này:Làm cách nào để đọc tệp kê khai cho webapp đang chạy trong apache tomcat?
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());
}
Khi tôi đính kèm eclipse để tomcat, tôi thấy rằng mã trên hoạt động, nhưng có vẻ như để có được một file manifest khác nhau so với cái tôi mong đợi, mà Tôi có thể nói vì phiên bản kiến và dấu thời gian xây dựng đều khác nhau. Sau đó, tôi đặt "META-INFFFF" vào đó, và đoạn mã trên vẫn hoạt động! Điều này có nghĩa là tôi đang đọc một số biểu hiện khác, không phải của tôi. Tôi cũng đã thử
this.getClass().getClassLoader().getResourceAsStream(...)
Nhưng kết quả là như nhau. Cách thích hợp để đọc tệp kê khai từ bên trong của một ứng dụng web chạy trong tomcat là gì?
Chỉnh sửa: Cảm ơn bạn đã đề xuất cho đến thời điểm này. Ngoài ra, tôi nên lưu ý rằng tôi am chạy tomcat độc lập; Tôi khởi động nó từ dòng lệnh, và sau đó đính kèm vào cá thể đang chạy trong trình gỡ rối của Eclipse. Điều đó không nên tạo nên sự khác biệt, phải không?
@ PascalĐó là câu trả lời đúng đắn. Thêm một số xử lý ngoại lệ trong trường hợp MANIFEST của bạn không tồn tại (tức là:) và nó phải là A1. – jmelanson
Phương pháp phổ quát này đã giúp tôi: [http://stackoverflow.com/a/29103019/3158918] – user3158918