Scala 如何在运行时选择要打包的子项目(使用ScopeFilter)?
我正在编写一个任务,将几个但不是所有的子项目打包在一起,并使用排除设置和Scala 如何在运行时选择要打包的子项目(使用ScopeFilter)?,scala,sbt,Scala,Sbt,我正在编写一个任务,将几个但不是所有的子项目打包在一起,并使用排除设置和task.all(scope filter)来选择项目。但是,sbt保持say在运行时引用未定义的设置 下面是我使用的project/build.scala错误,我需要您的建议: import sbt._ import Keys._ object build extends Build { lazy val root = Project( id = "root", base = file("."),
task.all(scope filter)
来选择项目。但是,sbt保持say在运行时引用未定义的设置
下面是我使用的project/build.scala错误,我需要您的建议:
import sbt._
import Keys._
object build extends Build {
lazy val root = Project(
id = "root",
base = file("."),
aggregate = Seq(a,b),
settings = Seq(
exclude := Seq(a),
module := moduleImpl.value,
modules := modulesImpl.value
)
)
lazy val a = Project(
id = "a",
base = file("a")
)
lazy val b = Project(
id = "b",
base = file("b")
)
val exclude = settingKey[Seq[ProjectReference]]("excludes")
val module = taskKey[String]("module")
val modules = taskKey[Seq[String]]("modules")
def moduleImpl = Def.task {
projectID.value.organization
}
def modulesImpl = Def.taskDyn {
module.all(ScopeFilter(inAggregates(ThisProject) -- inProjects(exclude.value: _*)))
}
}
这是我真正想要消除的错误:
> show modules
[trace] Stack trace suppressed: run last root/*:modules for the full output.
[error] (root/*:modules) sbt.Init$RuntimeUndefined: References to undefined settings at runtime.
[error] Total time: 0 s, completed 2014-06-12 16:48:05
有没有办法解决这个问题?sbt会抱怨,因为子项目中没有定义您正在使用的任务 解决方案不是在
module
上调用它,而是在moduleImpl
lazy val moduleImpl = Def.task {
projectID.value.organization
}
def modulesImpl = Def.taskDyn {
moduleImpl.all(ScopeFilter(inAggregates(ThisProject) -- inProjects(exclude.value: _*)))
}
当你这样做的时候
Project(
id = "root",
base = file("."),
aggregate = Seq(a,b),
settings = Seq(
exclude := Seq(a),
module := moduleImpl.value,
modules := modulesImpl.value
)
)
您将覆盖所有默认设置。您可能希望使用默认值添加它们。默认设置
或使用项目
上的设置
方法