2016-07-19 15 views
10

https://stackoverflow.com/a/21605652/1737727の答えは、メインプロジェクトからRootProjectで定義されたサブプロジェクトの1つの設定を上書きする方法を示しています。私は複数の設定のためにこれを行う良い方法があるのだろうか、多分複数のサブプロジェクトについても考えていたので、すべての組み合わせを個別にリストする必要はありません。これは、増殖を防ぎ、組み合わせを忘れて誤って設定の不一致を起こす可能性を減らすためです。 SBT `RootProject`の共通設定を使用

lazy val commonSettings = Seq(
    organization := "com.example", 
    version := "0.1.0", 
    scalaVersion := "2.11.8" 
) 

lazy val core = (project in file("core")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

lazy val util = (project in file("util")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

しかし RootProjectは、その設定を設定する方法はありません。

RootProjectを使用しない場合は、SBT docsは設定の共通の配列でこれを行う方法を示しています。私は、上記の答えに従って、次のようなものを試しました:

lazy val util = RootProject(file("../util")) 
commonSettings.map(_.key).foreach(key => key in util := key.value) 

これは正しいアプローチではないようです。

私はGlobalまたはThisBuildスコープを使用しましたが、各サブプロジェクトはそれ自身のbuild.sbtファイルの設定を行います。正しく理解すると、これらのスコープよりも優先されます。

これを行うには良い方法がありますか、または各サブプロジェクトの各設定を手動で設定する必要がありますか?私は異なるスコープを使用すべきですか?サブプロジェクトはGlobalの設定を定義し、メインプロジェクトはThisBuildですか?

答えて

0

さてあなたはこの操作を行うこともできます。これは、設定のスコープのそれぞれがutilプロジェクトになるように変更され、新たなSeq[Setting[_]]を作成

commonSettings.map { s => s.mapKey(Def.mapScope(_.in(util))) } 

。これはsbtファイル内の有効なエントリです。

別のオプションを使用すると、両方のあなたのメインのプロジェクトに追加するのsbtプラグインを定義し、RootProject自身build.sbtで

しかし、あなたが実際にRootProjectの代わりとしてutilプロジェクトをインポートする必要がある場合は検討する必要がありますされます通常のサブプロジェクトです。

+2

本当にうれしくあります。私は 'RootProject'を使っています。なぜなら、サブプロジェクトはメインプロジェクトの兄弟ディレクトリにあり(複数のプロジェクトで共有されています)、' project in file( "../ util") 'を実行することはできません。より良い方法について学ぶことは素晴らしいことですが、この質問の話題は完全にはないかもしれません。 – sgvd

+0

'util'が独自のビルドを必要としない場合は、' unmanagedSourceDirectories'に直接追加することでインクルードすることができます。 –

関連する問題