声明自己的设置的最佳位置,以便我可以从 sbt shell 和我的 .sbt 和 .scala 构建文件访问它们?

Best place to declare own settings so I can access them from sbt shell and my .sbt and .scala build files?

我的设置在对象 BuildSupportproject/Utils.scala 中声明,并且在 .sbt.scala 文件中可用 import BuildSupport._。 但是,如上面的屏幕截图所示,这对 sbt shell 不起作用,因为我无法将它们导入那里。为了完整起见,我尝试了 eval import BuildSupport._ 但让我失望的是 <eval>:1: error: illegal start of simple expression.

我如何定义自己的设置和任务,以便我可以从以下位置访问它们:

我假设在 AutoPlugin 中定义它们是可行的,但我宁愿不必花那么多时间。还有其他办法吗?

声明一个 adhoc AutoPlugin (https://www.scala-sbt.org/1.x/docs/Plugins.html) 是可行的方法。

自动插件...

  • 可以定义autoImport对象,自动包含到build.sbt中。这可以用于键。
  • 可以定义 globalSettingsbuildSettingsprojectSettings 以在构建级别或子项目级别注入设置和任务。这应该在 sbt shell.
  • 中可用

插件不必单独发布。您可以像任何其他 Scala 对象一样在 project/*.scala 中声明一个。

链接文档中的插件非常适合复制粘贴:

package sbthello

import sbt._
import Keys._

object HelloPlugin extends AutoPlugin {
  override def trigger = allRequirements

  object autoImport {
    val helloGreeting = settingKey[String]("greeting")
    val hello = taskKey[Unit]("say hello")
  }

  import autoImport._
  override lazy val globalSettings: Seq[Setting[_]] = Seq(
    helloGreeting := "hi",
  )

  override lazy val projectSettings: Seq[Setting[_]] = Seq(
    hello := {
      val s = streams.value
      val g = helloGreeting.value
      s.log.info(g)
    }
  )
}