【发布时间】:2017-08-08 17:48:44
【问题描述】:
我编写了几个 AutoPlugins 来简化我的多项目 sbt 构建。
其中一个 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-android AutoPlugin 的类似设置会产生所需的工件,但如果我添加一个 sbt-android AutoPlugin,它就会消失。
我还玩弄了enablePlugins 中的插件顺序。
我正在使用"org.scala-android" %% "sbt-android" % "1.7.2" 和sbt 0.13.13。
【问题讨论】:
标签: sbt