Scala 如何使用SBT进行抽象?

Scala 如何使用SBT进行抽象?,scala,sbt,Scala,Sbt,我有一个build.sbt文件,其中包含以下代码片段: scalastyleConfig in Compile := baseDirectory.value / "project" / "scalastyle_config.xml" scalastyleConfig in Test := baseDirectory.value / "project" / "scalastyle_config.xml" 当我使用IntelliJ提取变量时,我得到: 这不需要评估 我调整了方法,得到了两个可能的备

我有一个
build.sbt
文件,其中包含以下代码片段:

scalastyleConfig in Compile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Test := baseDirectory.value / "project" / "scalastyle_config.xml"
当我使用IntelliJ提取变量时,我得到:

这不需要评估

我调整了方法,得到了两个可能的备选方案:

val scalastyleConfigFile = SettingKey[File]("scalaStyleConfig")
scalastyleConfigFile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile.value
scalastyleConfig in Test := scalastyleConfigFile.value
或:

我对我的两个选择都不满意。我现在使用第二种选择,因为它比较短。必须将
baseDirectory.value
作为参数传递给函数,这很烦人

我使用
lazy val
尝试了各种版本,但都不起作用:(.一定有更好的方法用SBT进行抽象


您能帮忙吗?

围绕原始示例使用
Def.setting{}

val scalaStyleConfig: File = Def.setting { baseDirectory.value / "project" / "scalastyle_config.xml" }
scalastyleConfig in Compile := scalaStyleConfig.value
scalastyleConfig in Test := scalaStyleConfig.value
原因是
:=
Def.setting
是编译时宏,只能在正确的设置下工作

有关更多解释,请参阅

def scalastyleConfigFile(baseDir: File) = baseDir / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile(baseDirectory.value)
scalastyleConfig in Test := scalastyleConfigFile(baseDirectory.value)
val scalaStyleConfig: File = Def.setting { baseDirectory.value / "project" / "scalastyle_config.xml" }
scalastyleConfig in Compile := scalaStyleConfig.value
scalastyleConfig in Test := scalaStyleConfig.value