Сборка JAR со всеми зависимостями Gradle

Сборка Gradle JAR в два приёма.

Ситуация - есть проект с Gradle надо создать jar со всеми зависимостями и запускать командой java -jar file. Еще называют такие сборки Fat Jar.

Используется Gradle 7.1

  • Подключаем библиотеку Shadow

В файле build.gradle добавляйте в список плагинов Gradle Shadow. В readme в гитхабе уточните нужную вам версию.

 id("com.github.johnrengelman.shadow") version "7.1.0"

Получится так:

plugins {
    id 'java'
    id("com.github.johnrengelman.shadow") version "7.1.0"
}
  • Добавляем конфигурацию запуска

Минимально, в значении Main-Class необходимо указать, какой класс содержит main метод для запуска:

jar {
    manifest {
        attributes(
                'Main-Class': 'ru.sendel.Main'
        )
    }
}
  • Собираем jar

Осталось выполнить команду:

gradle clean shadowJar

и в директории build/libs/ появится fat jar.

Profit! ✨

🚨 Возможные ошибки

Если возникает ошибка:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':xxxxx:shadowJar'.
> org.apache.tools.zip.Zip64RequiredException: archive contains more than 65535 entries.

  To build this archive, please enable the zip64 extension.
  See: http://gradle.org/docs/2.1/dsl/org.gradle.api.tasks.bundling.Zip.html#org.gradle.api.tasks.bundling.Zip:zip64

Причина этого - использование zip32 и у него ограничение на 65535 записей внутри архива. Необходимо в build.gradle добавить параметр для shadowJar включающий zip64:

shadowJar {
  zip64 true
}
Создано при помощи Hugo
Тема Stack, дизайн Jimmy