如何从Gradle调用sbt任务?

时间:2018-08-10 20:19:57

标签: gradle sbt

如何从Gradle构建中调用sbt项目上的任务?我想调用一个现有的sbt任务,而不是移植并将该任务的代码复制到我的Gradle构建中。

理想情况下,我希望能够做到这一点,而无需在正在运行的计算机上安装sbt。

作为一个简单而具体的示例,假设我具有以下项目结构:

parent_directory
  gradle_project
    build.gradle
    [...]
  sbt_project
    build.sbt
    [...]

以及以下build.sbt文件:

val helloTask = TaskKey[Unit]("hello", "Print hello")
helloTask := println("Hello world!")

我想从build.sbt中定义的“ helloSbt” Gradle任务中调用build.gradle中定义的“ hello” sbt任务。

1 个答案:

答案 0 :(得分:2)

sbt-extras项目提供了一个名为sbt的独立脚本,该脚本可以直接用于运行sbt,而无需先在计算机上运行它。可以通过Gradle项目中的“ Exec”任务来调用,该任务指定要作为程序参数运行的sbt任务。

首先,将sbt-extras/sbt中的sbt文件复制到本地项目中。假设sbt脚本已作为gradle_project/sbt-extras/sbt复制到项目中,以下Gradle任务将在build.sbt中执行“ hello”任务:

task helloSbt(type: Exec) {
    workingDir new File(project.projectDir.parentFile, 'sbt_project')
    executable new File(project.projectDir, 'sbt-extras/sbt')
    args 'hello'
}