Що таке файл JAR?
Файл із розширенням .jar — це файл архіву Java, який містить багато різних файлів, пов’язаних із програмами, як один файл. Цей формат файлу було створено, щоб зменшити швидкість завантаження завантаженого аплету Java у браузері через транзакцію HTTP, уникаючи створення кількох HTTP-з’єднань. Один файл JAR може містити файли класів Java (.class), зображення і звуки. Окремі елементи у файлі JAR можуть бути підписані цифровим підписом розробника програми, щоб підтвердити їх походження. Файли JAR регулярно використовуються для створення функціональних API, які містять певні функції, пов’язані з цим API.
Формат файлу JAR
Файли JAR засновані на популярному форматі файлу ZIP, який архівує окремі файли вмісту в одному файлі. Формат файлу JAR підтримує стиснення, що призводить до меншого розміру файлу для завантаження, а отже, додатково збільшує час завантаження. Стаття Специфікації файлів JAR від Oracle містить повну інформацію про внутрішні специфікації файлів JAR.
Файл маніфесту
Коли створюється файл JAR, у ньому автоматично створюється файл маніфесту, який містить інформацію метаданих про вміст файлу JAR. Цей файл показує вміст, упакований у файл JAR. Типовий файл маніфесту виглядає так, у якому показано папки та класи, включені до файлу JAR.
META-INF/
META-INF/MANIFEST.MF
pack/
pack/class1.class
pack/class2.class
..
..
Специфікації маніфесту
Специфікації маніфесту визначені Oracle наступним чином.
файл-маніфесту
: новий рядок основного розділу *окремий розділ
main-section
: інформація про версію новий рядок *основний-атрибут
version-info
: маніфест-версія: номер версії
номер-версії
: цифра+{.цифра+}*
main-attribute
: (будь-який допустимий головний атрибут) новий рядок
individual-section
: Ім’я: значення нового рядка *perentry-attribute
perentry-attribute
: (будь-який законний атрибут perentry) новий рядок
новий рядок
: CR LF | LF | CR (без LF)
digit
: {0-9}
Виконуваний JAR
Файли JAR також можуть містити програму, яка може бути виконана віртуальною машиною Java (JVM), подібною до будь-якої іншої програми в операційній системі Microsoft Windows. У цьому випадку JVM має знати про точку входу програми, яка є будь-яким класом із загальнодоступним статичним методом void main. Файл маніфесту ідентифікує такий клас із заголовком Main-Class
у такому форматі:
Main-Class: com.example.MyClassName