如何使用gradle任务运行shadow jar?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用gradle任务运行shadow jar?相关的知识,希望对你有一定的参考价值。

我想在使用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}"
    }
}

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

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

谢谢 :)

答案

你不应该触摸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
}

以上是关于如何使用gradle任务运行shadow jar?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gradle 中使用带有混淆 jar 的 Launch4J

gradle 中的 shadow 插件不起作用 - gradle build 不会构建胖 jar

如何使用 Gradle 创建具有实现依赖项的可执行胖 jar

Gradle - 将任务输出写入文件

Eclipse在运行或调试期间没有使用gradle依赖jar

如何使用 gradle 构建源 jar?