The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Каждый пакет Java (JAR, WAR, EAR и т. д.) содержит файл MANIFEST.MF
в каталоге META-INF
. Файл содержит список атрибутов, которые описывают данный пакет. Например:
Когда ваше приложение имеет несколько зависимостей JAR, у вас есть несколько файлов MANIFEST.MF
в вашем пути классов. Все они находятся в одном и том же месте: META-INF/MANIFEST.MF
. Очень часто необходимо пройти через все из них во время выполнения и найти атрибут по его имени.
jcabi-manifests позволяет сделать это с одной командой.
Давайте посмотрим, почему вам может потребоваться читать атрибуты из файлов манифеста и как это работает на низком уровне.
При упаковке библиотеки или даже веб-приложения хорошей практикой является добавление атрибута к файлу MANIFEST.MF
с именем версии пакета и номером сборки. В Maven для этого можно использовать плагин maven-jar-plugin
(почти та же конфигурация для maven-war-plugin
).
buildnumber-maven-plugin
will help you to get ${buildNumber}
from Git, SVN or Mercurial:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
После всех этих манипуляций в вашем JAR файле MANIFEST.MF
будет содержаться две дополнительные строки (помимо всех остальных строк, добавленных туда по умолчанию с помощью Maven).
Во время выполнения вы можете показать эти значения пользователю, чтобы помочь ему понять, с какой версией продукта он работает в данный момент.
Посмотрите на stateful.co, например. Внизу его главной страницы вы видите номер версии и хэш Git. Они извлекаются из MANIFEST.MF
развернутого пакета WAR на каждый щелчок по странице.
Хотя это может считаться плохой практикой (см. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley), иногда удобно упаковывать учетные данные для продакшн-среды непосредственно в архив JAR/WAR во время цикла непрерывной интеграции/доставки.
Например, вы можете закодировать данные для подключения к PostgreSQL прямо в MANIFEST.MF
:
Позднее вы можете получить их во время выполнения, используя jcabi-manifests
:
Если вы знаете о других полезных целях для MANIFEST.MF
, дайте мне знать.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-28 at 15:46