我已经写了几个AutoPlugins来简化我的多项目构建。SBT AutoPlugin缺少添加的神器
其中一个AutoPlugins定义了一个TaskKey[File]
,并为该任务的结果添加了一个工件。
object PluginA extends AutoPlugin {
val content: SettingKey[File] = taskKey[String]("")
val generateArtifact: TaskKey[File] = taskKey[File]("generated artifact file")
override lazy val projectSettings: Seq[Def.Setting[_]] = {
addArtifact(
Artifact("foo", "xml", "xml"), generateArtifact
).settings ++
Seq(
generateArtifact := {
val bar = content.value
...
}
)
}
}
然后,我有另一种AutoPlugin是requires
插件上面添加一些设置。
object PluginB extends AutoPlugin {
override def requires: Plugins = PluginA
override lazy val projectSettings: Seq[Def.Setting[_]] = Seq(
content := "..."
)
}
一切都很好。 现在我尝试新的神器添加到我的项目`build.sbt``
val someModule = (project in file("Module")).enablePlugins(PluginB, AndroidJar)
val someApp = (project in file("Application")).enablePlugins(PluginB, AndroidApp)
可悲的是,当我在SBT控制台输入publishLocal
只有默认的构件发布,但不是我的新的XML文件。 show artifacts
也没有列出神器。
但是,我知道插件和插件设置加载,因为show generateArtifact
产生所需的文件。这只是在某处丢失的神器。
注
的(据我可以看到)类似的设置没有任何SBT-机器人AutoPlugin产生期望的伪影,而它消失,如果我添加一个SBT-机器人AutoPlugin。
我也玩过enablePlugins
插件的顺序。我使用"org.scala-android" %% "sbt-android" % "1.7.2"
和sbt 0.13.13
。