sbt中具有非默认项目的fullRunTask

时间:2019-05-09 04:00:26

标签: scala sbt

我在build.sbt中定义了几个项目,来源不同。我想保持根项目的原样,并使用其自己的源集(和类路径),但是要添加一个sbt任务来编译和运行非默认项目。

(简称)build.sbt

lazy val root = project in file(".")

lazy val anotherModule = project in file("modules/another")

lazy val runAnother = taskKey[Unit]("Run a task from anotherModule")
fullRunTask(initialImport, Compile, "another.module.Main")

another.module实际上位于modules/another/src中,因此它不包含在根项目中。

运行sbt runAnother时,无法在类路径上找到another.module

我不希望root项目依赖于anotherModule,因为除此任务外,根项目不需要其中的代码。

如何使用指定模块的类路径运行此任务?

1 个答案:

答案 0 :(得分:1)

runner可以代替fullRunTask这样使用

lazy val anotherModule = project in file("modules/another")

lazy val runAnother = taskKey[Unit]("Run task with the classpath of runAnother sub-project")
runAnother := {
  (runner in Compile).value.run(
    mainClass = "another.module.Main",
    classpath = (anotherModule / Compile / fullClasspath).value.files,
    options = Array[String](),
    log = streams.value.log
  )
}

请注意我们如何访问anotherModule子项目的类路径

classpath = (anotherModule / Compile / fullClasspath).value.files

现在sbt runAnother应该可以在默认的anotherModule项目中运行root子项目。