«1. Обзор

В этой быстрой статье мы рассмотрим создание «толстой банки» в Gradle.

По сути, толстый jar (также известный как uber-jar) — это самодостаточный архив, который содержит как классы, так и зависимости, необходимые для запуска приложения.

2. Первоначальная настройка

Начнем с простого файла build.gradle для проекта Java с двумя зависимостями:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
}

3. Использование задачи Jar из подключаемого модуля Java

Начнем с модификации задача jar из плагина Java Gradle. По умолчанию эта задача создает банки без каких-либо зависимостей.

Мы можем изменить это поведение, добавив несколько строк кода. Чтобы это заработало, нам нужны две вещи:

    Атрибут Main-Class в файле манифеста. Включить jar-файлы зависимостей.

Давайте добавим несколько модификаций в задачу Gradle:

jar {
    manifest {
        attributes "Main-Class": "com.baeldung.fatjar.Application"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

4. Создание отдельной задачи ~~ ~ Если мы хотим оставить исходную задачу jar как есть, мы можем создать отдельную задачу, которая будет выполнять ту же работу.

Следующий код добавит новую задачу с именем customFatJar:

5. Использование специальных плагинов

task customFatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'com.baeldung.fatjar.Application'
    }
    baseName = 'all-in-one-jar'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

Мы также можем использовать существующие плагины Gradle для создания толстого jar.

В этом примере мы будем использовать плагин Shadow:

Как только мы применим плагин Shadow, задача shadowJar будет готова к использованию.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
    }
}

apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'

6. Заключение

В этом уроке мы представили несколько различных способов создания толстых банок в Gradle. Мы переопределили задачу jar по умолчанию, создали отдельную задачу и использовали теневой плагин.

Какой подход рекомендуется? Ответ — это зависит.

В простых проектах достаточно переопределить задачу jar по умолчанию или создать новую. Но по мере роста проекта мы настоятельно рекомендуем использовать плагины, потому что они уже решили более сложные проблемы, такие как конфликты с внешними файлами META-INF.

Как всегда, полную реализацию этого руководства можно найти на GitHub.

«

« Previous

Writing Custom Gradle Plugins