运行 个可执行 jar 文件和 运行 个 Kotlin DSL 任务的另一个任务
run executable jar files and run another task with Kotlin DSL's task
我想 运行 具有特定名称的任务和 运行 可执行 jar 文件与 Kotlin DSL 的任务,但我无法在几个小时内找到如何,而且我也不知道是否有可能。
请帮助我;-;
这是我的代码
tasks {
shadowJar {
destinationDirectory.set(file("TestBukkit/plugins/"))
}
val runTestBukkit by registering {
doFirst {
//want to run a task named "shadowJar"
}
doLast {
//want to run executable jar with flags
}
}
}
在Gradle中基本上有三种链接任务的方法。
对你来说,TL;DR 可能是
val runTestBukkit by tasks.registering(JavaExec::class) {
dependsOn(tasks.shadowJar)
// to run an executable jar with flags, see https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
}
有关详细信息,请参阅文档 https://docs.gradle.org/current/userguide/more_about_tasks.html
doLast { ... }
& doFirst { ... }
- 向现有任务添加操作
文档:Manipulating existing tasks
您可以修改现有任务以在其执行之前或之后执行其他操作...
tasks.shadowJar {
doFirst {
logger.lifecycle("I'm an extra action!")
}
doLast {
copy {
from(this@shadowJar.outputs)
into(project.buildDirectory.dir("copied-shadow-jar"))
}
}
}
这些附加操作将在 tasks.shadowJar
运行 秒时执行。它们按照代码中定义的顺序执行。
这对于添加小的额外任务非常方便,例如清理目录或复制任务输出。不过,更复杂的任务可能会更棘手一些,因此最好使用 dependsOn(...)
...
dependsOn(...)
添加任务依赖项
文档:Adding dependencies to a task
有时您希望依赖于其他任务的任务成功 运行。也许是因为他们需要成功,或者是因为他们生产了您想要消费的人工制品。
您还可以创建一个依赖于其他任务的新任务...
val runTestBukkit by tasks.registering {
dependsOn(tasks.shadowJar)
}
使用dependsOn
意味着shadowJar
必须运行在runTestBukkit
运行秒之前成功,但是runTestBukkit
不会 运行 除非特别要求
(使用 ./gradlew :runTestBukkit
,或者如果另一个任务依赖于它)。如果 shadowJar
失败,那么 runTestBukkit
就不会 运行。
dependsOn
可以 真正 如果 shadowJar
产生一个工件,并且 Gradle 缓存输入和输出。不管你运行runTestBukkit
多少次,shadowJar
只会运行必要的!
finalizedBy(...)
有时您总是 想要一个任务在另一个任务之后运行。为此,您可以使用 finalizedBy(...)
。当涉及到测试报告生成时,您会经常看到它 - 例如,我 总是 希望生成测试报告,即使 test
任务失败。
tasks.test {
finalizedBy(tasks.jacocoTestReport)
}
我想 运行 具有特定名称的任务和 运行 可执行 jar 文件与 Kotlin DSL 的任务,但我无法在几个小时内找到如何,而且我也不知道是否有可能。
请帮助我;-;
这是我的代码
tasks {
shadowJar {
destinationDirectory.set(file("TestBukkit/plugins/"))
}
val runTestBukkit by registering {
doFirst {
//want to run a task named "shadowJar"
}
doLast {
//want to run executable jar with flags
}
}
}
在Gradle中基本上有三种链接任务的方法。
对你来说,TL;DR 可能是
val runTestBukkit by tasks.registering(JavaExec::class) {
dependsOn(tasks.shadowJar)
// to run an executable jar with flags, see https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
}
有关详细信息,请参阅文档 https://docs.gradle.org/current/userguide/more_about_tasks.html
doLast { ... }
& doFirst { ... }
- 向现有任务添加操作
文档:Manipulating existing tasks
您可以修改现有任务以在其执行之前或之后执行其他操作...
tasks.shadowJar {
doFirst {
logger.lifecycle("I'm an extra action!")
}
doLast {
copy {
from(this@shadowJar.outputs)
into(project.buildDirectory.dir("copied-shadow-jar"))
}
}
}
这些附加操作将在 tasks.shadowJar
运行 秒时执行。它们按照代码中定义的顺序执行。
这对于添加小的额外任务非常方便,例如清理目录或复制任务输出。不过,更复杂的任务可能会更棘手一些,因此最好使用 dependsOn(...)
...
dependsOn(...)
添加任务依赖项
文档:Adding dependencies to a task
有时您希望依赖于其他任务的任务成功 运行。也许是因为他们需要成功,或者是因为他们生产了您想要消费的人工制品。
您还可以创建一个依赖于其他任务的新任务...
val runTestBukkit by tasks.registering {
dependsOn(tasks.shadowJar)
}
使用dependsOn
意味着shadowJar
必须运行在runTestBukkit
运行秒之前成功,但是runTestBukkit
不会 运行 除非特别要求
(使用 ./gradlew :runTestBukkit
,或者如果另一个任务依赖于它)。如果 shadowJar
失败,那么 runTestBukkit
就不会 运行。
dependsOn
可以 真正 如果 shadowJar
产生一个工件,并且 Gradle 缓存输入和输出。不管你运行runTestBukkit
多少次,shadowJar
只会运行必要的!
finalizedBy(...)
有时您总是 想要一个任务在另一个任务之后运行。为此,您可以使用 finalizedBy(...)
。当涉及到测试报告生成时,您会经常看到它 - 例如,我 总是 希望生成测试报告,即使 test
任务失败。
tasks.test {
finalizedBy(tasks.jacocoTestReport)
}