Ответ
Преимущества:
- Портативность: Один файл содержит скомпилированные классы, ресурсы и метаданные (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 .