Каковы преимущества и недостатки JAR-файлов в Java?

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

Ответ

Преимущества:

  • Портативность: Один файл содержит скомпилированные классы, ресурсы и метаданные (MANIFEST.MF).
  • Простота распространения и развертывания: Упрощает передачу и запуск приложения.
  • Сжатие: Использует формат ZIP, что уменьшает размер.
  • Безопасность: Поддержка цифровых подписей для проверки целостности и источника.
  • Инкапсуляция зависимостей: Возможность создания "fat JAR" (Uber JAR), включающего все библиотеки.

Недостатки:

  • Требует JVM: Не является нативно исполняемым файлом.
  • Ограниченная защита кода: Без обфускации легко декомпилировать.
  • Конфликты зависимостей: Проблемы с версиями библиотек, особенно в больших проектах.
  • Обновления: Для изменения одного класса необходимо пересобирать и перераспространять весь JAR.
  • Отсутствие стандартной модульности (до JPMS): Сложности с управлением зависимостями и видимостью классов.

Пример создания:

# Создание JAR из скомпилированных классов
jar cf myapp.jar -C out/classes .

# Создание исполняемого JAR (с указанием main-класса)
jar cfe app.jar com.example.Main -C out/classes .