2012-10-02 25 views
8

私は共通の設定を持つ複数のSBTプロジェクトを持っています。マルチモジュール、公開設定など。SBT共通ビルド設定

それぞれのプロジェクトがそれから拡張できるCommonBuildクラス?たとえば:

trait CommonBuild { 
    val publishSettings = Seq(
    publishTo := Some("", ""), 
    credentials += ... 
) 

    def module(name: String) (
    settings: Seq[Setting[_]], 
    projectId: String = PROJECT + "-" + name, 
    dirName: String = name, 
    srcPath: String = PROJECT + name 
    ) = Project(projectId, file(dirName), settings = (buildSettings ++ srcPathSetting(projectId, srcPath)) ++ publishSettings ++ settings) 

} 

は、今では、プロジェクトのビルドで使用することができます。

object ProjABuild extends CommonBuild { 
    // use CommonBuild methods/vals 
} 

object ProjBBuild extends CommonBuild { 
    // use CommonBuild methods/vals 
} 
+0

これらのプロジェクトはSbtプロジェクト専用ですか、それともSbtサブプロジェクトですか? –

+0

プロジェクトAとBはサブプロジェクト/モジュールではなく、専用のSbtプロジェクトです。 – Dzhu

+1

build.scalaで外部ライブラリコードを使用する方法の特別なケースが多分疑問に思えるかもしれませんか?あなたの目標を達成するだろうか? – Owen

答えて

3

私もこれをやってみたかったです。重要なのは、共通セットアップは、サブプロジェクトが依存する独自のプロジェクトに存在する必要があるため、共通セットアップに対する変更がすべてのサブプロジェクトで自動的に有効になることです。これを達成する唯一の方法は、共通のものをSBTプラグインに入れることです。

iesl-sbt-baseというプラグインを作成しました。これは、プロジェクトのBuild.scalaファイルが自明に短くなるように、定型ファイルを提供します。それは提供しています。

  • リゾルバ設定
  • 推移的な依存は、スナップショットのバージョンから
  • オプションの保護を使用しているものに自動更新
  • クラリティと
  • 簡素化された依存関係の解決
  • クリーンアップのロギングコンフィギュレーション

詳しくはhttps://github.com/iesl/iesl-sbt-baseをご覧ください。おそらく、セットアップに固有のもの(たとえば、リゾルバURL)を変更するためにそれをフォークしたいと思うでしょう。需要がある場合は、それをより設定可能にする方法について考えることができます。

+0

本当にありがとうDavid! – Dzhu

関連する問題