我已經寫了幾個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
。