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