2017-03-17 10 views
0

私は複数プロジェクトのSBTビルドを簡略化するためにいくつかのAutoPluginsを作成しました。SBT AutoPluginにアーティファクトが追加されていません

これらのAutoPlugの1つは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 
      ... 
     } 
    ) 
    } 
} 

それから私はいくつかの設定を追加するには、上記のプラグインをrequires別AutoPluginを持っています。

object PluginB extends AutoPlugin { 
    override def requires: Plugins = PluginA 
    override lazy val projectSettings: Seq[Def.Setting[_]] = Seq(
    content := "..." 
) 
} 

これまでのところすべてです。 は今、私は私のsbtコンソールでpublishLocalを入力したときにのみ、デフォルトの成果物が公開され、build.sbt``

悲しいこと
val someModule = (project in file("Module")).enablePlugins(PluginB, AndroidJar) 
val someApp = (project in file("Application")).enablePlugins(PluginB, AndroidApp) 

`に私のプロジェクトに新しい案件を追加しようではなく、私の新しいXMLファイル。 show artifactsにはアーティファクトも表示されません。

しかし、show generateArtifactが目的のファイルを生成するため、プラグインとプラグインの設定がロードされていることがわかりました。どこかで失われたのはアーティファクトだけです。私はSBT-アンドロイドAutoPluginを追加する場合には、消滅しながら

(私の知る限り)同様のセットアップ任意のSBT-アンドロイドAutoPluginなしNOTE

Anが、希望アーティファクトを生成します。

また、プラグインの順番でenablePluginsに遊んでいました。

私は"org.scala-android" %% "sbt-android" % "1.7.2"sbt 0.13.13を使用しています。

答えて

0

自分の問題に対する解決策を自分で見つけました。

掘り下げた後、CorePluginがartifactsからNilにリセットされました。

プラグインのプラグインにCorePluginまたはJvmPluginのいずれかが必要です。リセットを行う設定が自分のprojectSettingsの前にロードされるようにするには、アーティファクトを追加します。

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

SBT-アンドロイドに見せかけの関係は偶然でした。

関連する問題