如何使用 gradle 任务 运行 隐藏 jar?
How to run shadow jar with a gradle task?
我想 运行 在使用 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 任务将 fat jar 构建到我的全局构建目录中。但我希望能够 运行 并在 IntelliJ 中仅使用一个 运行 配置来构建它。我该怎么做?
也许还有另一种方法可以让 gradle 将我的所有输出重定向到全局构建目录。我不想手动为每个 IntelliJ 项目配置相同的输出路径。欢迎提出建议。
谢谢:)
你不应该触摸 buildDir
属性 来实现你想要的。
相反,您应该创建一个 JavaExec
任务,该任务将从 shadow jar 启动应用程序。
如果您希望该执行与生成的 jar 的默认位置不同,您应该更改影子任务本身的输出,并且仅 that 输出或执行任务依赖于将影子罐移动的复制任务。
类似于:
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
}
我想 运行 在使用 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 任务将 fat jar 构建到我的全局构建目录中。但我希望能够 运行 并在 IntelliJ 中仅使用一个 运行 配置来构建它。我该怎么做?
也许还有另一种方法可以让 gradle 将我的所有输出重定向到全局构建目录。我不想手动为每个 IntelliJ 项目配置相同的输出路径。欢迎提出建议。
谢谢:)
你不应该触摸 buildDir
属性 来实现你想要的。
相反,您应该创建一个 JavaExec
任务,该任务将从 shadow jar 启动应用程序。
如果您希望该执行与生成的 jar 的默认位置不同,您应该更改影子任务本身的输出,并且仅 that 输出或执行任务依赖于将影子罐移动的复制任务。
类似于:
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
}