2017-03-17 62 views
0

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

回答

0

我自己發現了我的問題的解決方案。

經過一番挖掘,我發現CorePlugin重置artifactsNil

必須在插件中添加CorePluginJvmPlugin,該插件添加工件以確保執行重置的設置在自己的projectSettings之前加載。

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

的表面上的關係SBT-的Android是巧合。