Перейти к содержимому

Manifest mf что это

  • автор:

Manifest mf что это

Скачать Книгу: JAR | TXT | TXT в ZIP | Doc | всё в zip

Скачать Программы: По отдельности | Все в ZIP

Папка Meta-inf с файлом meta-inf имеется в каждой игре.

Что же такое Meta-inf файл? -Это основной файл каждой игры.

Для чего Он нужен? -Для полноценной работы игры.

За что Он отвечает? -В нем прописывается от имени до размера.

Какие основные характеристики meta-inf? -Рассмотрим строение простейшего файла из папки meta-inf. А Он выглядит так:

Manifest-Version: 1.0 (версия игры)

Ant-Version: Apache Ant 1.6.5 Created-By: 1.5.0_05-b05 (Sun Microsystems Inc.) (Система Производитель)

MIDlet-1: Escape,/icono.png (путь к иконке игры),escape.Escape (файл запуска)

MIDlet-Vendor: Vendor (создатель)

MIDlet-Icon: /icono.png (картинка на оглавление)

MIDlet-Version: 1.0 (версия) .

MIDlet-Name: Escape (имя игры)

MicroEdition-Configuration: CLDC-1.0 (экран телефона)

MicroEdition-Profile: MIDP-2.0 (версия для запуска на определенном телефоне с поддержкой)

(Информация на файл о поставщике или другая информация. Когда вы создаете JAR- файл, он автоматически получает файл манифеста по умолчанию . В архиве есть только один файл манифеста, он всегда имеет имя M E T A- I N F /M A N I F E S T . M F. Когда JAR-файл создается версией 1.2 JavaTM Development Kit, манифест по умолчанию очень простой . Вот его полное содержимое:

M a n i f e s t — V e r s i on : 1 . 0

N a m e : j a v a /m a t h / B i gD e c i m a l . c l a s s

SH A 1 — D i g e s t : TD 1 G Z t 8 G 1 1 dXY 2 p4 o l S Z P c 5 R j 6 4 = \ M D 5 — D i g e s t : z 6 z 8 x P j 2 A W / Q 9 A k RS P F 0 c g = = \ N a m e : j a v a /m a t h / B i g I n t e g e r . c l a s s \ SH A 1 — D i g e s t : oB m r v I k BnS x d N Z z P h5 i L y F 0 S + bE = \ M D 5 — D i g e s t : w F y m h D K j Nr eN Z 4 AzD W W g 1Q = = \ Как и в JDK 1.2, в JDK \ 1.1 манифест имеет

элемент для M a n i f e s t — V e r s i on. Номер версии тот же, показывающий, что спецификация манифеста не изменилась между версиями 1.1 и 1.2 JDK. Однако файл манифеста в JDK 1.2 имеет элементы для всех файлов , содержащихся в архиве , включая полные имена файла и значения дайджеста. Полные имена даются как значения заголовка N a m e . Любые заголовки, следующие за заголовком N a m e без пустых строк между ними , относятся к файлу, заданному заголовком N a m e . В приведенном выше \ манифесте , например, за первым заголовком \ N a m e следуют такие \ строки: \ SH A 1 — D i g e s t : TD 1 G Z t 8 G 1 1 dXY 2 p4 o l S Z P c 5 R j 6 4 = \ M D 5 — D i g e s t : z 6 z 8 x P j 2 A W / Q 9 A k RS P F 0 c g = = \ Поскольку эти строки следуют за заголовком N a m e без пустых строк между ними , вы знаете, что значения дайджеста, которые они задают, являются значениями дайджеста для файла j a v a /m a t h /

B i gD e c i m a l . c l a s s . Значения дайджеста относятся только к подписанным JAR- файлам. Фактически, именно поэтому информации дайджеста нет в манифесте по умолчанию JDK 1.2 — она не всегда нужна. Чтобы узнать больше о дайджестах и подписях , см. урок Подписание и проверка аутентичности JAR- файлов.

Что хранится в файле манифеста?

В JAR архиве можно найти файл META-INF/MANIFEST.MF . Это манифест архива – хранилище его метаинформации. Манифест обычно добавляется той же утилитой, которой собирается jar-файл: maven-jar-plugin , команда JDK jar .

Манифест – текстовый файл, который состоит из заголовков, строчек вида ключ: значение . Заголовки разделены на секции. Файл начинается с главной секции, описывающей метаинформацию всего архива. Следом, отделенные пустыми строками, идут секции для отдельных пакетов и файлов. В них могут переопределяться общие заголовки. JVM игнорирует неизвестные ей заголовки, что позволяет сторонним утилитам хранить в манифесте свою специфичную метаинформацию.

Вот некоторые из часто используемых заголовков:
• Информация об архиве: Manifest-Version, Created-By, Multi-Release, Built-By
• Main-class – точка входа приложения
• Classpath приложения
• Информация об экстеншне (Specification и Implementation, deprecated)
• Заголовки OSGI бандла
• Типы и хэши файлов архива (особенно применимо в Android приложениях)

Полный список стандартных заголовков можно почитать в документации.

Чтение атрибутов из MANIFEST.MF

При компиляции Java приложения вписываются данные в MANIFEST.MF файл которые потом должны использоваться при запуске приложения. Манифест файл содержит всё необходимое после компиляции. Часть кода из Ant скрипта:

Содержимое манифеста после компиляции:

Manifest-Version: 1.0 Ant-Version: Apache Ant 1.10.1 Created-By: 1.8.0_151-b12 (Oracle Corporation) Built-By: Rootware Built-Date: 2018-09-21 21:59:11 Implementation-Version: 1.0.0.0 Implementation-URL: http://example.com/ Main-Class: src.app.MyApp Class-Path: ../libs/c3p0-0.9.6-pre1.jar ../libs/json-simple-1.1.1.jar ../libs/mchange-commons-java-0.2.12.jar ../libs/mysql-connector-java- 5.1.46.jar 

Код Java для чтения атрибутов:

private static void getBuildDate() < try (InputStream stream = MyApp.class.getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF")) < final Manifest manifest = new Manifest(); manifest.read(stream); final Attributes attributes = manifest.getMainAttributes(); if (attributes.getValue("Built-Date") != null) BUILD_DATE = attributes.getValue("Built-Date"); else _log.info("Null attribute."); >catch (Exception e) < e.printStackTrace(); >> 

При чтении атрибута Built-Date всегда null. Подскажите, что я делаю не так при чтении манифеста? Если попытаться читать Implementation-Version, то выводится 0.9.6-pre1 версия первой библиотеки указанной в списке библиотек из Class-Path списка.

Понимание файла манифеста JAR

Архив Java (JAR) описывается его файлом манифеста. В этой статье рассматриваются его многочисленные возможности, в том числе добавление атрибуции, создание исполняемого файла JAR и встраивание информации о версиях.

Однако давайте начнем с краткого обзора того, что такое файл манифеста.

2. Файл манифеста

Файл манифеста называется MANIFEST.MF и находится в каталоге META-INF в JAR. Это просто список пар ключ-значение, называемый заголовками или атрибутами , сгруппированный в разделы.

Эти заголовки предоставляют метаданные, которые помогают нам описывать аспекты нашего JAR, такие как версии пакетов, какой класс приложения выполнять, путь к классам, материал подписи и многое другое.

3. Добавление файла манифеста

3.1. Манифест по умолчанию

Файл манифеста добавляется автоматически всякий раз, когда мы создаем JAR .

Например, если мы создадим JAR в OpenJDK 11:

 jar cf MyJar.jar classes/ 

Он создает очень простой файл манифеста:

 Manifest-Version: 1.0  Created-By: 11.0.3 (AdoptOpenJDK) 

3.2. Пользовательский манифест

Или мы можем указать наш собственный файл манифеста.

Например, предположим, что у нас есть пользовательский файл манифеста с именем manifest.txt :

 Built-By: foreach 

Мы можем включить этот файл, и jar объединит его с файлом манифеста по умолчанию, когда мы используем параметр m :

 jar cfm MyJar.jar manifest.txt classes/ 

Затем результирующий файл манифеста:

 Manifest-Version: 1.0  Built-By: foreach Created-By: 11.0.3 (AdoptOpenJDK) 

3.3. Мавен

Теперь содержимое файла манифеста по умолчанию меняется в зависимости от того, какие инструменты мы используем.

Например, Maven добавляет несколько дополнительных заголовков:

 Manifest-Version: 1.0  Archiver-Version: Plexus Archiver Created-By: Apache Maven 3.3.9 Built-By: foreach Build-Jdk: 11.0.3 

На самом деле мы можем настроить эти заголовки в нашем файле pom.

Скажем, например, что мы хотим указать, кем был создан JAR и пакет:

 plugin>   groupId>org.apache.maven.pluginsgroupId>   artifactId>maven-jar-pluginartifactId>   version>3.1.2version>   configuration>   archive>   manifest>   packageName>com.foreach.javapackageName>   manifest>   manifestEntries>   Created-By>foreachCreated-By>   manifestEntries>   archive>   configuration>   plugin> 

Это создает файл манифеста с пользовательским пакетом и заголовками , созданными :

 Manifest-Version: 1.0  Build-Jdk-Spec: 11  Package: com.foreach.java Created-By: foreach 

4. Заголовки

Заголовок должен соответствовать определенному формату и отделяться новой строкой:

 key1: value1 Key2: value2 

Действительный заголовок должен иметь пробел между двоеточием и значением . Еще один важный момент — в конце файла должна быть новая строка . В противном случае последний заголовок игнорируется.

Давайте рассмотрим некоторые стандартные заголовки из спецификации и некоторые распространенные настраиваемые заголовки.

4.1. Основные заголовки

Основные заголовки обычно содержат общую информацию:

  • Manifest-Version : версия спецификации.
  • Created-By : версия инструмента и поставщик, создавший файл манифеста.
  • Multi-Release : если true , то это Multi-Release Jar
  • Built-By : этот настраиваемый заголовок содержит имя пользователя, создавшего файл манифеста.

4.2. Точка входа и путь к классам

Если наш JAR содержит работающее приложение, мы можем указать точку входа. Точно так же мы можем указать путь к классам . Поступая таким образом, мы избегаем необходимости указывать его, когда хотим его запустить.

  • Main-Class : пакет и имя класса с основным методом (без расширения .class)
  • Class-Path : разделенный пробелами список относительных путей к библиотекам или ресурсам.

Например, если наша точка входа в приложение находится в Application.class и использует библиотеки и ресурсы, мы можем добавить необходимые заголовки:

 Main-Class: com.foreach.Application Class-Path: core.jar lib/ properties/ 

Путь к классам включает core.jar и все файлы в каталогах lib и properties . Эти активы загружаются относительно места выполнения JAR, а не из самого JAR . Другими словами, они должны существовать вне JAR.

4.3. Версия упаковки и запечатывание

Эти стандартные заголовки описывают пакеты в JAR.

  • Название : пакет
  • Реализация-Build-Date : дата сборки реализации.
  • Реализация-название : название реализации
  • Реализация- вендор : поставщик реализации
  • Реализация-Версия : версия реализации
  • Specification-Title : название спецификации.
  • Specification-Vendor : поставщик спецификации
  • Версия спецификации: версия спецификации
  • Sealed : если true, то все классы для пакета взяты из одного и того же JAR (по умолчанию false)

Например, мы находим эти заголовки манифеста в драйвере MySQL Connector/J JAR . Они описывают версию спецификации JDBC, которой соответствует JAR, а также версию самого драйвера:

 Specification-Title: JDBC Specification-Version: 4.2  Specification-Vendor: Oracle Corporation Implementation-Title: MySQL Connector/J Implementation-Version: 8.0.16 Implementation-Vendor: Oracle 

4.4. Подписанная банка

Мы можем подписать наш JAR цифровой подписью, чтобы добавить дополнительную безопасность и проверку. Хотя этот процесс выходит за рамки данной статьи, он добавляет в файл манифеста стандартные заголовки, показывающие каждый подписанный класс и его закодированную подпись . Дополнительные сведения см. в документации по подписанию JAR .

4.5. ОСГИ

Обычно также можно увидеть пользовательские заголовки для пакетов OSGI:

  • Название пакета : название
  • Bundle-SymbolicName : уникальный идентификатор
  • Bundle-Version : версия
  • Import-Package : пакеты и версии, от которых зависит пакет.
  • Export-Package : набор пакетов и версий, доступных для использования.

См. нашу статью «Введение в OSGI », чтобы узнать больше о пакетах OSGI.

5. Разделы

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

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

Давайте рассмотрим простой пример раздела для каждой записи:

 Implementation-Title: foreach-examples  Implementation-Version: 1.0.1 Implementation-Vendor: ForEach Sealed: true   Name: com/foreach/utils/ Sealed: false 

Основной раздел вверху запечатал все пакеты в нашем JAR. Однако пакет com.foreach.utils распечатывается разделом для каждой записи.

6. Заключение

В этой статье представлен обзор того, как добавить файл манифеста в JAR, как использовать разделы и некоторые общие заголовки. Структура файла манифеста позволяет нам предоставлять стандартную информацию, такую как информация о версии.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *