Scala 在SBT`RootProject中使用常用设置`
处的答案显示了如何覆盖主项目中使用Scala 在SBT`RootProject中使用常用设置`,scala,sbt,Scala,Sbt,处的答案显示了如何覆盖主项目中使用RootProject定义的子项目的一个设置。我想知道是否有一种很好的方法可以用于多个设置,然后也可以用于多个子项目,这样您就不必单独列出每个组合。这将是为了防止扩散,减少忘记组合和意外设置不匹配的机会 当不使用RootProject时,将显示如何使用常见的设置序列执行此操作: lazy val commonSettings = Seq( organization := "com.example", version := "0.1.0", scala
RootProject
定义的子项目的一个设置。我想知道是否有一种很好的方法可以用于多个设置,然后也可以用于多个子项目,这样您就不必单独列出每个组合。这将是为了防止扩散,减少忘记组合和意外设置不匹配的机会
当不使用RootProject
时,将显示如何使用常见的设置序列执行此操作:
lazy val commonSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.11.8"
)
lazy val core = (project in file("core")).
settings(commonSettings: _*).
settings(
// other settings
)
lazy val util = (project in file("util")).
settings(commonSettings: _*).
settings(
// other settings
)
但是RootProject
没有设置其设置的方法。根据上面提到的答案,我尝试了以下方法:
lazy val util = RootProject(file("../util"))
commonSettings.map(_.key).foreach(key => key in util := key.value)
但这似乎不是正确的方法
我曾研究过使用Global
或ThisBuild
范围,但每个子项目都在其自己的build.sbt
文件中设置,如果我理解正确,该文件优先于这些更广泛的范围
是否有一种很好的方法可以做到这一点,或者我应该手动设置每个子项目的每个设置?我是否应该使用不同的范围,例如,子项目在全局中定义其设置,主项目在此构建中定义其设置?您可以这样做:
这将创建新的Seq[Setting[\u]]
,其中每个设置的作用域都更改为在util
项目中。这是sbt文件中的有效条目
另一个选项是定义一个sbt插件,将其添加到主项目和RootProject自己的build.sbt中
但您可能需要考虑,如果您真的需要导入<代码> UTI.<代码>项目作为<代码> RootProject <代码>,而不是常规子项目。
确实有效,非常感谢!我使用RootProject
,因为子项目位于主项目的同级目录中(它由多个项目共享),您不能在文件(“../util”)中执行project
。了解更好的方法会很好,尽管可能不完全是关于这个问题的主题。如果util
不需要自己的构建,您可以通过直接添加到unmanagedSourceDirectories
来包含。自sbt 1.5.0以来,
中的.in语法被标记为不推荐,并要求使用斜杠语法。
commonSettings.map { s => s.mapKey(Def.mapScope(_.in(util))) }