Ответ 1
Содержимое файла манифеста в файле JAR, созданное с версией 1.0 Java Development Kit, является следующим.
Manifest-Version: 1.0
Все записи являются парами имя-значение. Имя заголовка отделено от его значения двоеточием. Показатель по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста. В манифесте также может содержаться информация о других файлах, которые упакованы в архив. Точно, какая информация о файле записывается в манифесте, будет зависеть от предполагаемого использования файла JAR. Файл манифеста по умолчанию не делает никаких предположений о том, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о себе. Заголовки манифеста специального назначения
В зависимости от предполагаемой роли JAR файла может потребоваться изменение манифеста по умолчанию. Если файл JAR создается только для архивации, файл MANIFEST.MF не имеет никакой цели. В большинстве случаев использование JAR файлов выходит за рамки простого архивирования и сжатия и требует, чтобы в файле манифеста была специальная информация. Ниже приведены краткие описания заголовков, требуемые для некоторых специальных функций JAR файла.
Приложения, входящие в состав JAR файлов: Если приложение поставляется в JAR файле, виртуальной машине Java должно быть рассказано, что такое точка входа в приложение. Точкой входа является любой класс с общедоступным методом static void main (String [] args). Эта информация предоставляется в заголовке Main-Class, который имеет общий вид:
Main-Class: classname
Имя класса value должно быть заменено точкой ввода приложения.
Расширения загрузки:. Загрузка расширений - это файлы JAR, на которые ссылаются файлы манифеста других JAR файлов. В типичной ситуации апплет будет связан в файле JAR, чей манифест ссылается на файл JAR (или несколько файлов JAR), который будет служить расширением для целей этого апплета. Расширения могут ссылаться друг на друга таким же образом. Расширения загрузки указаны в поле заголовка Class-Path в файле манифеста апплета, приложения или другого расширения. Заголовок Class-Path может выглядеть так:
Class-Path: servlet.jar infobus.jar acme/beans.jar
В этом заголовке классы в файлах 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."