Использование манифеста.Файл MF в Java

Я заметил, что файлы JAR, WAR и EAR имеют под META-INF папка.

какая польза от ? Какие все вещи можно указать в этом файле?

2 ответов


содержимое файла манифеста в файле JAR, созданном с версией 1.0 Java Development Kit, является следующим.

Manifest-Version: 1.0

все записи являются парами имя-значение. Имя заголовка отделяется от его значения двоеточием. Манифест по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста. Манифест также может содержать сведения о других файлах, упакованных в архив. Какая именно информация о файле записывается в манифест будет зависеть от предполагаемого использования файла JAR. Файл манифеста по умолчанию не предполагает, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о себе. Заголовки Манифеста Специального Назначения

в зависимости от предполагаемой роли файла JAR манифест по умолчанию может быть изменен. Если файл JAR создается только с целью архивирования, то манифест.Файл MF не имеет смысла. Большинство применений JAR файлов выходят за рамки простое архивирование и сжатие и требуют специальной информации, чтобы быть в файле манифеста. Ниже приведены краткие описания заголовков, которые необходимы для некоторых специальных функций JAR-файлов

приложения в комплекте как файлы JAR: если приложение упаковано в файл JAR, виртуальной машине Java нужно сказать, какова точка входа в приложение. Точкой входа является любой класс с открытым статическим методом void main (String[] args). Этот информация предоставляется в заголовке Main-Class, который имеет общую форму:

Main-Class: classname

значение classname должно быть заменено точкой входа приложения.

Скачать Расширения: расширения загрузки-это файлы JAR, на которые ссылаются файлы манифеста других файлов JAR. В типичной ситуации апплет будет упакован в файл JAR, манифест которого ссылается на файл JAR (или несколько файлов JAR), который будет служить расширением для цели этого апплета. Расширения могут ссылаться друг на друга одинаково. Расширения загрузки указываются в поле заголовка Class-Path в файле манифеста апплета, приложения или другого расширения. Заголовок пути к классу может выглядеть следующим образом, например:

Class-Path: servlet.jar infobus.jar acme/beans.jar

С этим заголовком классы в сервлете files.фляги, сайт Infobus.банка и акме / бобы.jar будет служить в качестве расширений для целей апплета или приложения. URL-адреса в заголовке Class-Path приведены относительно URL-адреса JAR-файла апплета или приложения.

Пакета Запечатывания: пакет в файле JAR может быть дополнительно запечатан, что означает, что все классы, определенные в этом пакете, должны быть заархивированы в одном файле JAR. Пакет может быть запечатан для обеспечения согласованности версий между классами программного обеспечения или в качестве меры безопасности. Чтобы запечатать пакет, необходимо добавить заголовок имени для пакета, а затем запечатанный заголовок, подобный это:

Name: myCompany/myPackage/
Sealed: true

значение заголовка Name является относительным путем пакета. Обратите внимание, что он заканчивается на '/', чтобы отличить его от имени. Любые заголовки, следующие за заголовком имени, без каких-либо промежуточных пустых строк применяются к файлу или пакету, указанному в заголовке имени. В приведенном выше примере, поскольку запечатанный заголовок возникает после заголовка Name: myCompany/myPackage, без пустых строк между ними, запечатанный заголовок будет интерпретироваться как применяющийся (только) к пакету 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."

Манифест.MF содержит информацию о файлах, содержащихся в файле JAR.

всякий раз, когда файл JAR создается манифест по умолчанию.файл mf создается внутри папки META-INF и содержит записи по умолчанию, такие как:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

это записи как пары "заголовок: значение". Первый указывает версию манифеста, а второй - версию JDK, с помощью которой создается файл JAR.

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

Main-Class: {полное имя класса}

значение "Main-Class" здесь-это класс, имеющий метод main. После указания этой записи мы можем выполнить файл JAR для запуска приложения.

заголовок пути к классу: В большинстве случаев нужно доступ к другим файлам JAR из классов, упакованных внутри файла JAR приложения. Это можно сделать, предоставив их полные пути в файле манифеста, используя заголовок "Class-Path",

путь к классу: {jar1-name jar2-name directory-name / jar3-name}

этот заголовок можно использовать для указания внешних файлов JAR в той же локальной сети, а не внутри текущей JAR.

заголовки, связанные с версией пакета: Когда файл JAR используется для управление версиями пакетов следующие заголовки используются в соответствии со спецификацией языка Java:

Headers in a manifest
Header                  | Definition
-------------------------------------------------------------------
Name                    | The name of the specification.
Specification-Title     | The title of the specification.
Specification-Version   | The version of the specification.
Specification-Vendor    | The vendor of the specification.
Implementation-Title    | The title of the implementation.
Implementation-Version  | The build number of the implementation.
Implementation-Vendor   | The vendor of the implementation.

заголовки пакета герметизируя родственные:

мы также можем указать, должны ли какие-либо конкретные пакеты внутри файла JAR быть запечатаны, что означает, что все классы, определенные в этом пакете, должны быть заархивированы в том же файле JAR. Это можно указать с помощью заголовка "Sealed",

имя: {package / some-пакет/} Запечатано: true

здесь, имя пакета должно заканчиваться ‘/’.

повышение безопасности с помощью файлов манифеста:

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

папка META-INF:

в этой папке находится манифест файл находится. Кроме того, он может содержать больше файлов, содержащих метаданные о приложении. Например, в файле JAR модуля EJB эта папка содержит дескриптор развертывания EJB для модуля EJB вместе с файлом манифеста для JAR. Кроме того, он содержит xml-файл, содержащий отображение абстрактных ссылок EJB на конкретные контейнерные ресурсы сервера приложений, на котором он будет бежать.

Reference:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html