如何用SBT进行抽象?
How to abstract with SBT?
我有一个包含以下片段的 build.sbt
文件:
scalastyleConfig in Compile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Test := baseDirectory.value / "project" / "scalastyle_config.xml"
当我使用 IntelliJ 提取变量 时,我得到:
val scalaStyleConfig: File = baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalaStyleConfig
scalastyleConfig in Test := scalaStyleConfig
不计算。
我调整了一些东西以获得 2 个可能的替代方案来评估:
val scalastyleConfigFile = SettingKey[File]("scalaStyleConfig")
scalastyleConfigFile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile.value
scalastyleConfig in Test := scalastyleConfigFile.value
或:
def scalastyleConfigFile(baseDir: File) = baseDir / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile(baseDirectory.value)
scalastyleConfig in Test := scalastyleConfigFile(baseDirectory.value)
我对我的两种选择都不满意。我目前正在使用第二种选择,因为它更短。必须将 baseDirectory.value
作为参数传递给函数,这很烦人。
我使用 lazy val
-none 尝试了各种版本,其中有效:(。必须有更好的方法来使用 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
是编译时宏,只有在正确的设置下才有效。
有关更多说明,请参阅 http://www.scala-sbt.org/0.13/docs/ChangeSummary_0.13.0.html#New+task%2Fsetting+syntax。
我有一个包含以下片段的 build.sbt
文件:
scalastyleConfig in Compile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Test := baseDirectory.value / "project" / "scalastyle_config.xml"
当我使用 IntelliJ 提取变量 时,我得到:
val scalaStyleConfig: File = baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalaStyleConfig
scalastyleConfig in Test := scalaStyleConfig
不计算。
我调整了一些东西以获得 2 个可能的替代方案来评估:
val scalastyleConfigFile = SettingKey[File]("scalaStyleConfig")
scalastyleConfigFile := baseDirectory.value / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile.value
scalastyleConfig in Test := scalastyleConfigFile.value
或:
def scalastyleConfigFile(baseDir: File) = baseDir / "project" / "scalastyle_config.xml"
scalastyleConfig in Compile := scalastyleConfigFile(baseDirectory.value)
scalastyleConfig in Test := scalastyleConfigFile(baseDirectory.value)
我对我的两种选择都不满意。我目前正在使用第二种选择,因为它更短。必须将 baseDirectory.value
作为参数传递给函数,这很烦人。
我使用 lazy val
-none 尝试了各种版本,其中有效:(。必须有更好的方法来使用 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
是编译时宏,只有在正确的设置下才有效。
有关更多说明,请参阅 http://www.scala-sbt.org/0.13/docs/ChangeSummary_0.13.0.html#New+task%2Fsetting+syntax。