Я заметил, что файлы JAR, WAR и EAR имеют MANIFEST.MF
файл в META-INF
папке.
Какая польза от MANIFEST.MF
файла? Что все можно указать в этом файле?
java
manifest.mf
Ананд
источник
источник
Ответы:
Содержимое файла манифеста в файле JAR, созданном с помощью Java Development Kit версии 1.0, следующее.
Manifest-Version: 1.0
Все записи представлены парами имя-значение. Имя заголовка отделяется от его значения двоеточием. Манифест по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста. Манифест также может содержать информацию о других файлах, упакованных в архив. То, какая именно информация о файле записана в манифесте, будет зависеть от предполагаемого использования файла JAR. Файл манифеста по умолчанию не делает никаких предположений о том, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о себе. Заголовки манифеста специального назначения
В зависимости от предполагаемой роли JAR-файла может потребоваться изменить манифест по умолчанию. Если файл JAR создается только с целью архивирования, то файл MANIFEST.MF не имеет смысла. В большинстве случаев использование файлов JAR выходит за рамки простого архивирования и сжатия и требует наличия специальной информации в файле манифеста. Ниже приведены краткие описания заголовков, необходимых для некоторых специальных функций JAR-файла.
Приложения, объединенные в файлы JAR: если приложение объединено в файл JAR, виртуальной машине Java необходимо сообщить, какова точка входа в приложение. Точкой входа является любой класс с общедоступным статическим методом void main (String [] args). Эта информация представлена в заголовке Main-Class, который имеет общий вид:
Значение classname следует заменить точкой входа приложения.
Расширения загрузки: расширения загрузки - это файлы JAR, на которые ссылаются файлы манифеста других файлов JAR. В типичной ситуации апплет будет объединен в файл JAR, манифест которого ссылается на файл JAR (или несколько файлов JAR), который будет служить расширением для целей этого апплета. Расширения могут ссылаться друг на друга таким же образом. Расширения загрузки указываются в поле заголовка Class-Path в файле манифеста апплета, приложения или другого расширения. Заголовок Class-Path может выглядеть, например, так:
С этим заголовком классы в файлах servlet.jar, infobus.jar и acme / beans.jar будут служить расширениями для апплета или приложения. URL-адреса в заголовке Class-Path указываются относительно URL-адреса JAR-файла апплета или приложения.
Запечатывание пакета: пакет в файле JAR может быть дополнительно запечатан, что означает, что все классы, определенные в этом пакете, должны быть заархивированы в одном файле JAR. Пакет может быть запечатан для обеспечения согласованности версий между классами вашего программного обеспечения или в качестве меры безопасности. Чтобы запечатать пакет, необходимо добавить заголовок Name для пакета, за которым следует заголовок Sealed, примерно так:
Name: myCompany/myPackage/ Sealed: true
Значение заголовка Name - это относительный путь к пакету. Обратите внимание, что он заканчивается знаком «/», чтобы отличить его от имени файла. Любые заголовки, следующие за заголовком Name, без промежуточных пустых строк, применяются к файлу или пакету, указанному в заголовке Name. В приведенном выше примере, поскольку заголовок Sealed появляется после заголовка Name: myCompany / myPackage без пустых строк между ними, заголовок Sealed будет интерпретирован как применимый (только) к пакету myCompany / myPackage.
Управление версиями пакетов: спецификация управления версиями пакетов определяет несколько заголовков манифеста для хранения информации о версиях. Каждому пакету может быть назначен один набор таких заголовков. Заголовки управления версиями должны появиться непосредственно под заголовком Name пакета. В этом примере показаны все заголовки управления версиями:
Name: java/util/ Specification-Title: "Java Utility Classes" Specification-Version: "1.2" Specification-Vendor: "Sun Microsystems, Inc.". Implementation-Title: "java.util" Implementation-Version: "build57" Implementation-Vendor: "Sun Microsystems, Inc."
источник
Manifest.MF содержит информацию о файлах, содержащихся в файле JAR.
Всякий раз, когда создается файл JAR, в папке META-INF создается файл manifest.mf по умолчанию, содержащий такие записи по умолчанию, как это:
Manifest-Version: 1.0 Created-By: 1.7.0_06 (Oracle Corporation)
Это записи в виде пар «заголовок: значение». Первый указывает версию манифеста, а второй указывает версию JDK, с которой создается файл JAR.
Заголовок Main-Class: когда файл JAR используется для объединения приложения в пакет, нам необходимо указать класс, обслуживающий точку входа приложения. Мы предоставляем эту информацию, используя заголовок Main-Class файла манифеста,
Основной класс: {полное название класса}
Значение «Main-Class» здесь - это класс, имеющий основной метод. После указания этой записи мы можем выполнить файл JAR для запуска приложения.
Заголовок Class-Path: в большинстве случаев нам нужен доступ к другим файлам JAR из классов, упакованных внутри файла JAR приложения. Это можно сделать, указав их полные пути в файле манифеста с помощью заголовка Class-Path,
Путь к классу: {имя-jar1 имя-jar2 имя-каталога / имя-jar3}
Этот заголовок можно использовать для указания внешних файлов JAR в той же локальной сети, а не внутри текущего JAR.
Заголовки, связанные с версией пакета: когда файл JAR используется для управления версиями пакета, используются следующие заголовки, как указано в спецификации языка Java:
Заголовки, связанные с уплотнением пакетов:
Мы также можем указать, должны ли быть запечатаны какие-либо конкретные пакеты внутри файла JAR, что означает, что все классы, определенные в этом пакете, должны быть заархивированы в одном файле JAR. Это можно указать с помощью заголовка «Запечатанный»,
Имя: {package / some-package /} Запечатано: true
Здесь имя пакета должно заканчиваться на '/'.
Повышение безопасности с помощью файлов манифеста:
Мы можем использовать записи файлов манифеста для обеспечения безопасности веб-приложения или апплета, которые оно упаковывает с различными атрибутами, такими как «Разрешения», «Кодеба», «Имя приложения», «Только доверие» и многие другие.
Папка META-INF:
В этой папке находится файл манифеста. Также он может содержать больше файлов, содержащих метаданные о приложении. Например, в файле JAR модуля EJB эта папка содержит дескриптор развертывания EJB для модуля EJB вместе с файлом манифеста для JAR. Кроме того, он содержит файл xml, содержащий отображение абстрактных ссылок EJB на ресурсы конкретного контейнера сервера приложений, на котором он будет запущен.
Ссылка:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
источник