Создание исполняемого JAR файла в IntelliJ IDEA с Gradle

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для создания исполняемого JAR-файла с использованием Gradle вам необходимо внести следующие изменения в файл build.gradle:

groovy
Скопировать код
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».

Кинга Идем в IT: пошаговый план для смены профессии

Сборка приложения с использованием плагинов Gradle

Применение плагина Application

Плагин Application для Gradle упрощает процедуру создания JAR. Он добавляет такие задачи, как installDist, distZip, distTar, что дает возможность собрать ваше приложение вместе с его зависимостями.

groovy
Скопировать код
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:

groovy
Скопировать код
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:

Markdown
Скопировать код
🏗️ Строительство (Ваш код)
📦 Упаковка (Задача Gradle)
🚚 Доставка (Исполняемый JAR)

Перед вами наглядная модель, где ваш Java-проект является грузом, а Gradle — вашим персональным курьером:

Markdown
Скопировать код
1. **🏗️ Ваш код**: Создайте отличное Java-приложение.
2. **📦 Задача Gradle**: Настройте задачу 'jar' в файле `build.gradle`.
3. **🚚 Исполняемый JAR**: Запустите приложение при помощи команды `java -jar`, независимо от места его хранения.

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

  • mainClassName задает стартовую точку вашего приложения.
  • Пакетирование всех компонентов в один JAR-файл — практичный подход.
  • Теперь у вас есть полностью самостоятельное Java-приложение, готовое к запуску.

Практические рекомендации по работе с манифестом и ресурсами

Использование пути Class-Path в манифесте

Для того, чтобы хранить зависимости вне JAR-файла, укажите Class-Path в манифесте:

groovy
Скопировать код
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/ по умолчанию уже включены. Для исключения определенных файлов используйте следующий код:

groovy
Скопировать код
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.

groovy
Скопировать код
plugins {
    id 'java-library-distribution'
}

distributions {
    main {
        // Ваш код конфигурации
    }
}

Самодостаточный JAR

Для определенных проектов вы можете рассмотреть применение альтернативных плагинов, таких как 'one-jar', 'spring-boot', 'capsule'. Они также поддерживают создание исполняемых JAR-файлов.

Полезные материалы

  1. Плагин Java — Официальная документация Gradle.
  2. Сборка JAR-файлов в среде разработки IntelliJ IDEA — Обсуждение на Stack Overflow.
  3. Пример создания Java-библиотек с применением Gradle — Пример проекта от Gradle.
  4. Создание Fat/Uber JAR c использованием Gradle — Руководство по сборке Fat/Uber JAR.
  5. Плагин Shadow для Gradle — Репозиторий плагина Shadow на GitHub.
  6. Обучающее видео по сборке JAR с зависимостями при помощи Gradle — Видеоурок на YouTube.