我如何从Gradle调用sbt任务?

我如何从Gradle调用sbt任务?,gradle,sbt,Gradle,Sbt,如何从Gradle构建中调用sbt项目上的任务?我希望调用现有的sbt任务,而不是将任务的代码移植并复制到我的Gradle构建中 理想情况下,我希望能够做到这一点,而不需要在我运行的机器上安装sbt 作为一个简单但具体的例子,假设我有以下项目结构: parent_directory gradle_project build.gradle [...] sbt_project build.sbt [...] 以及以下build.sbt文件: val hell

如何从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
中定义的“hello”sbt任务从
build.Gradle

中定义的“helloosbt”Gradle任务调用该项目提供了一个名为的独立脚本,该脚本可以直接用于运行sbt,而无需先在机器上运行。这可以通过Gradle项目中的“Exec”任务调用,指定要作为程序参数运行的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'
}