Как читать приложение MANIFEST.MF внутри WAR?

Я хотел бы прочитать MANIFEST.MF моего приложения WAR. Как я могу найти его имя файла?

Ответы

Ответ 1

Как найти имя файла?

У вас уже есть это. Может быть, вы хотели найти абсолютное местоположение файла? Вы можете использовать ServletContext#getRealPath() для этого.

String relativeWARPath = "/META-INF/MANIFEST.MF";
String absoluteDiskPath = getServletContext().getRealPath(relativeWARPath);
File file = new File(absoluteDiskPath);
// ...

Или, если вы хотите получить его как InputStream напрямую, используйте ServletContext#getResourceAsStream().

InputStream input = getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
// ...

Ответ 2

У меня была такая же проблема в каждом приложении, и я решил создать компонент с классом утилиты в нем: jcabi-manifestests. Теперь легко загрузить любой атрибут из одного из доступных MANIFEST.MF в пути к классам:

import com.jcabi.manifests.Manifests;
String value = Manifests.read("My-Version");

Кроме того, проверьте это: http://www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html

Ответ 3

Есть несколько способов сделать это, и выбранный ответ работает только тогда, когда вы хотите читать файлы Manifiest на уровне Servlet/SpringMVC или на любом уровне, к которому вы можете получить доступ к ServletContext.

Однако, если вы хотите прочитать значение типа "версия" еще до запуска сервлета, например, во время конфигурации журнала или что-то еще, вам может потребоваться некоторая обработка файлов в стиле старого или манипулирование файлами манифеста.

Я нашел этот репозиторий github (не мой), и он включает в себя 4 разных способа чтения информации из файла манифеста. Если ваша ситуация недоступна ServletContext, проверьте их.

https://github.com/khmarbaise/version-examples