Как читать приложение 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