2017-10-27 15 views
0

すべてのプロジェクトとサブプロジェクトのローカル設定をオーバーライドするために、非常に小さなオートプラグインを開発しようとしています。具体的には、私のプラグインがscalaVersionを変更し、それを含むプロジェクトのscalacOptionsに1つのオプションを追加したいと思います。 I have read in the documentationは、設定の割り当て順序を変更することができますが、正しいプロジェクトに割り当てていないようです。 これは私がこれまで持っているコードです:プロジェクト設定を上書きするSbt自動プラグイン

// build.sbt 
import AddSettings._ 

lazy val root = (project in file(".")) 
    .settingSets(userSettings, defaultSbtFiles, autoPlugins, buildScalaFiles) 
    .settings( 
    sbtPlugin := true, 
    name := "sbt-scalafix-config", 
    organization := "io.prl-prg", 
    version := "0.0.1", 
    addSbtPlugin("org.some" % "some-other-plugin" % "0.5.3") 
    ) 

// PluginCode.scala 

package config 
import sbt._ 
import sbt.Keys._ 

object PluginCode extends AutoPlugin { 
    override def trigger = allRequirements 
    override lazy val projectSettings = Seq(
    scalaVersion := "2.12.3", 
    scalacOptions := Seq("-Yrangepos") 
) 
    println("[PluginCode Setup] Hello World!") 
} 

すべてのヘルプは高く評価されます。

答えて

0

あなたは本当にそれはおそらくそれは、SBT 1になくなってビルド内のすべてのAutoPlugin Sの行動を破壊し、そして、

  • ます

    1. として、addSettingsを使用する必要はありません。 xとにかく(上記の理由で私は賭けました)

    AutoPluginは、プロジェクトの設定を上書きしてはなりません。プロジェクトは常に独自の設定について最終的な意見を述べる必要があります。

    あなたは簡単に(プラグインプロジェクトでに)代わりに:=+=を使用してscalacOptions一部を行うことができます。一般に、:=はSeq設定では実質的に使用しないでください。具体的にはscalacOptionsを使用してください。 scalaVersionについては

    override def projectSettings = Seq(
        scalacOptions += "-Yrangepos" 
    ) 
    

    プロジェクトは、明示的にscalaVersionを設定した場合、よく、あなたのAutoPluginがそれを覆すためにできることは何もありません。そしてそれはできないはずです。ただし、プロジェクトでプロジェクトレベルでscalaVersionが定義されていない場合(たとえば、in ThisBuildレベルの場合)、効果を得ることができます。

  • +0

    あなたの答えをありがとう、それはできないことを知っていいです、私は今、顔の表を停止することができます。しかし、プロジェクトの '.sbt'ファイルを直接編集することなく同じ効果を達成する方法はありますか? –

    関連する問題