运行 个可执行 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(...)

文档:Finalizer tasks

有时您总是 想要一个任务在另一个任务之后运行。为此,您可以使用 finalizedBy(...)。当涉及到测试报告生成时,您会经常看到它 - 例如,我 总是 希望生成测试报告,即使 test 任务失败。

tasks.test {
  finalizedBy(tasks.jacocoTestReport)
}