首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBT AutoPlugin缺失添加的伪影

SBT AutoPlugin缺失添加的伪影
EN

Stack Overflow用户
提问于 2017-03-17 08:50:40
回答 1查看 52关注 0票数 0

为了简化我的多项目sbt构建,我编写了几个AutoPlugins。

其中一个AutoPlugins定义了一个TaskKey[File],并为该任务的结果添加了一个工件。

代码语言:javascript
复制
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上面的插件,以添加一些设置。

代码语言:javascript
复制
object PluginB extends AutoPlugin {
  override def requires: Plugins = PluginA
  override lazy val projectSettings: Seq[Def.Setting[_]] = Seq(
    content := "..."
  )
}

到目前为止一切都很好。现在,我尝试将新工件添加到`build.sbt中的项目中。

代码语言:javascript
复制
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的类似设置会产生所需的工件,而如果我添加一个sbt,它就会消失。

我还在enablePlugins中玩插件的顺序。

我正在使用"org.scala-android" %% "sbt-android" % "1.7.2"sbt 0.13.13

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 14:18:12

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

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

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

代码语言:javascript
复制
object PluginA extends AutoPlugin {
  override def requires: Plugins = JvmPlugin
  ...
}

看起来与sbt的关系是巧合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42852964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档