SBT AutoPlugin 缺少添加的工件
Posted
技术标签:
【中文标题】SBT AutoPlugin 缺少添加的工件【英文标题】:SBT AutoPlugin missing added artifact 【发布时间】: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
。
【问题讨论】:
【参考方案1】:我自己找到了解决问题的方法。
经过一番挖掘,我发现CorePlugin 将artifacts
重置为Nil
。
必须在添加工件的插件中要求CorePlugin
或JvmPlugin
,以确保在自己的projectSettings
之前加载执行重置的设置。
object PluginA extends AutoPlugin
override def requires: Plugins = JvmPlugin
...
似乎与 sbt-android 的关系是巧合。
【讨论】:
以上是关于SBT AutoPlugin 缺少添加的工件的主要内容,如果未能解决你的问题,请参考以下文章
使用 SBT - Native Packager Plugin 添加工件以播放项目
使用 sbt-projectmatrix 创建 AutoPlugin。如何设置scalaVersion?