Какой формат содержимого у JAR-файла в Java?

«Какой формат содержимого у JAR-файла в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JAR (Java Archive) — это ZIP-архив, содержащий скомпилированные байт-код, ресурсы и метаданные.

Основные компоненты:

  • Скомпилированные .class-файлы — байт-код, готовый для выполнения JVM.
  • Ресурсы — файлы конфигурации, изображения, свойства и т.д.
  • Метаданные — каталог META-INF/, содержащий файл манифеста (MANIFEST.MF).

Типичная структура:

myapp.jar
├── META-INF/
│   └── MANIFEST.MF
├── com/
│   └── example/
│       ├── Main.class
│       └── utils/
│           └── Helper.class
└── application.properties

Создание JAR:

  1. Компиляция исходного кода: javac com/example/*.java.
  2. Упаковка в архив с помощью утилиты jar:
    jar cvf myapp.jar com/example/*.class META-INF/MANIFEST.MF

    Или автоматически через системы сборки (Maven/Gradle).

Манифест (MANIFEST.MF) определяет метаинформацию, например, главный класс для исполняемого JAR:

Manifest-Version: 1.0
Main-Class: com.example.Main