声明自己的设置的最佳位置,以便我可以从 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?
我的设置在对象 BuildSupport
的 project/Utils.scala
中声明,并且在 .sbt
和 .scala
文件中可用 import BuildSupport._
。
但是,如上面的屏幕截图所示,这对 sbt shell 不起作用,因为我无法将它们导入那里。为了完整起见,我尝试了 eval import BuildSupport._
但让我失望的是 <eval>:1: error: illegal start of simple expression
.
我如何定义自己的设置和任务,以便我可以从以下位置访问它们:
project/*.scala
,
*.sbt
和
- sbt shell?
我假设在 AutoPlugin 中定义它们是可行的,但我宁愿不必花那么多时间。还有其他办法吗?
声明一个 adhoc AutoPlugin (https://www.scala-sbt.org/1.x/docs/Plugins.html) 是可行的方法。
自动插件...
- 可以定义
autoImport
对象,自动包含到build.sbt
中。这可以用于键。
- 可以定义
globalSettings
、buildSettings
或 projectSettings
以在构建级别或子项目级别注入设置和任务。这应该在 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)
}
)
}
我的设置在对象 BuildSupport
的 project/Utils.scala
中声明,并且在 .sbt
和 .scala
文件中可用 import BuildSupport._
。
但是,如上面的屏幕截图所示,这对 sbt shell 不起作用,因为我无法将它们导入那里。为了完整起见,我尝试了 eval import BuildSupport._
但让我失望的是 <eval>:1: error: illegal start of simple expression
.
我如何定义自己的设置和任务,以便我可以从以下位置访问它们:
project/*.scala
,*.sbt
和- sbt shell?
我假设在 AutoPlugin 中定义它们是可行的,但我宁愿不必花那么多时间。还有其他办法吗?
声明一个 adhoc AutoPlugin (https://www.scala-sbt.org/1.x/docs/Plugins.html) 是可行的方法。
自动插件...
- 可以定义
autoImport
对象,自动包含到build.sbt
中。这可以用于键。 - 可以定义
globalSettings
、buildSettings
或projectSettings
以在构建级别或子项目级别注入设置和任务。这应该在 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)
}
)
}