object BlaBlaPlugin extends AutoPlugin {
object autoImport {
lazy val blabla = settingKey[Unit]("")
}
import autoImport._
override lazy val globalSettings = Seq(
blabla := println(ivyPaths.value.ivyHome.get.getPath)
)
}
我明白了:
[error] Reference to undefined setting:
[error]
[error] */*:ivyPaths from */*:blabla ((BlaBlaPlugin) BlaBlaPlugin.scala:11)
ivyPaths不是在全球范围内定义的吗? 我可以在.sbt / global.sbt中访问它,但不能在插件的globalSettings中访问它。
干杯
答案 0 :(得分:0)
插件有几个问题。
ivyPaths不是在全球范围内定义的吗?
不,不是。
> inspect ivyPaths
[info] Setting: sbt.IvyPaths = sbt.IvyPaths@13e5338f
[info] Description:
[info] Configures paths used by Ivy for dependency management.
[info] Provided by:
[info] {file:/Users/xxx/foo/}root/*:ivyPaths
[info] Defined at:
[info] (sbt.Classpaths) Defaults.scala:1128
[info] Dependencies:
[info] *:appConfiguration
[info] *:baseDirectory
[info] Reverse dependencies:
[info] *:cleanCacheIvyDirectory
[info] *:ivyConfiguration
[info] *:blabla
[info] Delegates:
[info] *:ivyPaths
[info] {.}/*:ivyPaths
[info] */*:ivyPaths
这表明ivyPaths
的格式为{file:/Users/xxx/foo/}root/*:ivyPaths
,其范围限定为当前项目root
。如果您喜欢星球大战编码(使用源代码,Luke )Defaults.scala通常是一个很好的起点。
所以要改变的第一件事就是使用projectSettings
。
另请注意,sbt的内置设置和任务是使用自动插件加载的,因此如果您依赖它们,则需要确保将插件放在它们之后。为此,您需要覆盖requires
方法,如下所示:
override def requires: Plugins = sbt.plugins.IvyPlugin
import sbt._
import Keys._
object BlaBlaPlugin extends AutoPlugin {
override def requires: Plugins = sbt.plugins.IvyPlugin
object autoImport {
lazy val blabla = settingKey[Unit]("")
}
import autoImport._
override lazy val projectSettings = Seq(
blabla := println(ivyPaths.value.ivyHome.get.getPath)
)
}