Как создать исполняемую жировую банку с Gradle с зависимостями реализации

У меня есть простой проект в Gradle 4.6 и вы хотите сделать его исполняемым банком. Я пробовал shadow gradle-fatjar-plugin, gradle-fatjar-plugin, gradle-one-jar spring-boot-gradle-plugin плагинами spring-boot-gradle-plugin но ни один из них не добавляет мои зависимости, объявленные как implementation (у меня нет compile). Он работает с compile например, для gradle-one-jar но я хотел бы иметь зависимости от implementation.

Большое спасибо!

Ответ 1

Вы можете использовать следующий код.

jar {
    manifest {
        attributes(
                'Main-Class': 'com.package.YourClass'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
 }

Обязательно замените com.package.YourClass на полное имя класса, содержащее static void main( String args[] ).

Это упакует зависимости времени выполнения. Проверьте документы, если вам нужна дополнительная информация.

Ответ 2

Та же задача может быть достигнута с помощью Gradle Kotlin DSL аналогичным образом:

val jar by tasks.getting(Jar::class) {
    manifest {
        attributes["Main-Class"] = "com.package.YourClass"
    }

    from(configurations.runtime.map { if (it.isDirectory) it else zipTree(it) })
}