Использование манифеста.Файл 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