Как запустить теневую банку с задачей Gradle? - PullRequest
0 голосов
/ 16 марта 2019

Я хочу запустить свое приложение после сборки его с помощью плагина shadow jar.

build.gradle:

plugins {
    id 'java'
    id "org.jetbrains.kotlin.jvm" version "1.3.21"
    id "com.github.johnrengelman.shadow" version "5.0.0"
}

group 'org.example.java'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8
compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

repositories {
    jcenter()
}

dependencies {
    compile "io.ktor:ktor-server-netty:1.1.3"
}

У меня также есть глобальный init.gradle:

gradle.projectsLoaded {
    rootProject.allprojects {
        buildDir = "/Users/User/Builds/${rootProject.name}/${project.name}"
    }
}

Итак, теперь толстый jar можно собрать в мой глобальный каталог сборки с помощью задачи shadowJar.Но я хочу иметь возможность запускать и собирать его только с одной конфигурацией запуска в IntelliJ.Как мне это сделать?

Может быть, есть другой способ позволить gradle перенаправить весь мой вывод в глобальный каталог сборки.Я не хочу настраивать каждый проект IntelliJ с одним и тем же путем вывода вручную.Предложения приветствуются.

Спасибо:)

1 Ответ

1 голос
/ 18 марта 2019

Вам не следует прикасаться к свойству buildDir для достижения желаемого.

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

Что-то вроде:

shadowJar {
    destinationDir = "/Users/User/Builds/${rootProject.name}/${project.name}"
}

task runApp(type: JavaExec) {
    main = "your.main.Class
    classpath = shadowJar.archiveFile // use archivePath before Gradle 5.1
}
...