如何从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任务。
答案 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'
}