【问题标题】:SBT AutoPlugin missing added artifactSBT AutoPlugin 缺少添加的工件
【发布时间】: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


    【解决方案1】:

    我自己找到了解决问题的方法。

    经过一番挖掘,我发现CorePlugin 将artifacts重置为Nil

    必须在添加工件的插件中要求CorePluginJvmPlugin,以确保在自己的projectSettings 之前加载执行重置的设置。

    object PluginA extends AutoPlugin {
      override def requires: Plugins = JvmPlugin
      ...
    }
    

    似乎与 sbt-android 的关系是巧合。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2016-03-08
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多