1

我想在使用 shadow jar 插件构建后运行我的应用程序。

构建.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}"
    }
}

所以现在可以使用 shadowJar 任务将胖 jar 构建到我的全局构建目录中。但我希望能够在 IntelliJ 中仅使用一种运行配置来运行和构建它。我怎么做?

也许还有另一种方法可以让 gradle 将我的所有输出重定向到全局构建目录。我不想手动为每个 IntelliJ 项目配置相同的输出路径。欢迎提出建议。

谢谢 :)

4

1 回答 1

1

buildDir你不应该为了达到你想要的目的而触碰房产。

相反,您应该创建一个JavaExec将从影子 jar 启动应用程序的任务。如果您希望该执行位于与生成的 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
}
于 2019-03-18T13:58:20.567 回答