Создание исполняемого JAR файла в IntelliJ IDEA с Gradle
Быстрый ответ
Для создания исполняемого JAR-файла с использованием Gradle вам необходимо внести следующие изменения в файл build.gradle
:
jar {
manifest {
attributes 'Main-Class': 'com.yourapp.Main'
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
exclude 'путь/до/исключаемых/файлов'
with jar
}
Следует указать класс с методом main
вместо 'com.yourapp.Main'
. Данный код обеспечит пакетирование в JAR-файл манифеста со ссылкой на главный класс, а также включит все зависимости времени выполнения в один файл. Таким образом получится что-то вроде «все в одном JAR».
Сборка приложения с использованием плагинов Gradle
Применение плагина Application
Плагин Application для Gradle упрощает процедуру создания JAR. Он добавляет такие задачи, как installDist
, distZip
, distTar
, что дает возможность собрать ваше приложение вместе с его зависимостями.
apply plugin: 'application'
mainClassName = 'com.yourapp.Main'
distributions {
main {
contents {
from { 'src/main/resources' }
}
}
}
Используйте ./gradlew installDist
для создания распакованного дистрибутива. А для создания архивированных версий используйте команды ./gradlew distZip
и ./gradlew distTar
.
Создание Fat JARs для включения всех зависимостей
Чтобы сформировать Fat JAR — JAR-файл со всеми зависимостями приложения, примените плагин gradle-shadow-plugin
и выполняемую задачу shadowJar
:
plugins {
id 'com.github.johnrengelman.shadow' version 'X.X.X'
}
shadowJar {
archiveBaseName.set('my-app')
archiveVersion.set('1.0.0')
manifest {
attributes 'Main-Class': 'com.yourapp.Main'
}
}
Выполните ./gradlew shadowJar
для сборки файла my-app-1.0.0-all.jar
, который затем можно будет запустить командой java -jar
.
Визуализация
Процесс создания исполняемого файла JAR в Gradle можно схематично представить как систему доставки для кода на Java:
🏗️ Строительство (Ваш код)
📦 Упаковка (Задача Gradle)
🚚 Доставка (Исполняемый JAR)
Перед вами наглядная модель, где ваш Java-проект является грузом, а Gradle — вашим персональным курьером:
1. **🏗️ Ваш код**: Создайте отличное Java-приложение.
2. **📦 Задача Gradle**: Настройте задачу 'jar' в файле `build.gradle`.
3. **🚚 Исполняемый JAR**: Запустите приложение при помощи команды `java -jar`, независимо от места его хранения.
Основные моменты:
mainClassName
задает стартовую точку вашего приложения.- Пакетирование всех компонентов в один JAR-файл — практичный подход.
- Теперь у вас есть полностью самостоятельное Java-приложение, готовое к запуску.
Практические рекомендации по работе с манифестом и ресурсами
Использование пути Class-Path в манифесте
Для того, чтобы хранить зависимости вне JAR-файла, укажите Class-Path
в манифесте:
jar {
manifest {
attributes(
'Main-Class': 'com.yourapp.Main',
'Class-Path': configurations.runtimeClasspath.files.collect { "lib/$it.name" }.join(' ')
)
}
from {
configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { it.isDirectory() ? it : zipTree(it) }
} into 'lib'
}
Работа с ресурсами и исключение ненужных файлов
Ресурсы из src/main/resources/
по умолчанию уже включены. Для исключения определенных файлов используйте следующий код:
jar {
// ...
exclude '**/*.example', '**/*.temp'
}
Доступ к ресурсам в JAR-файле
Чтобы обратиться к ресурсам в файлах JAR, используйте конструкции вида getClass().getResource("/path/to/resource")
или ClassLoader.getSystemResource("path/to/resource")
.
Возможности реализации
Использование плагина java-library-distribution
Плагин java-library-distribution
помогает создавать распространяемые версии, в частности, zip-архивы с JAR-файлами и библиотеками в каталоге /lib
.
plugins {
id 'java-library-distribution'
}
distributions {
main {
// Ваш код конфигурации
}
}
Самодостаточный JAR
Для определенных проектов вы можете рассмотреть применение альтернативных плагинов, таких как 'one-jar', 'spring-boot', 'capsule'. Они также поддерживают создание исполняемых JAR-файлов.
Полезные материалы
- Плагин Java — Официальная документация Gradle.
- Сборка JAR-файлов в среде разработки IntelliJ IDEA — Обсуждение на Stack Overflow.
- Пример создания Java-библиотек с применением Gradle — Пример проекта от Gradle.
- Создание Fat/Uber JAR c использованием Gradle — Руководство по сборке Fat/Uber JAR.
- Плагин Shadow для Gradle — Репозиторий плагина Shadow на GitHub.
- Обучающее видео по сборке JAR с зависимостями при помощи Gradle — Видеоурок на YouTube.