我在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
,因为除此任务外,根项目不需要其中的代码。
如何使用指定模块的类路径运行此任务?
答案 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
子项目。