2013-10-31 13 views
5

私はいくつかのSBT 0.13/Play 2.2プロジェクト(ウェブサイト)を持っています。彼らはいくつかの共通の機能を共有するので、それらはすべてマルチモジュールです。これにより、プロジェクト構成ファイルは複雑でほぼ同じですが、それほど複雑ではありません。SBT(再生)マルチプロジェクトで共有設定を使用するにはどうすればよいですか?

これらの設定ファイルをプロジェクト全体でできるだけ共有したいと考えています(頻繁に再生を更新すると、5つ以上のウェブサイトを最新の状態に保つことができます)プロジェクト全体の依存関係リストの進化)。

build.propertiesとplugins.sbtはプロジェクト間で同一であり、簡単なスクリプトで上書きできます。すばらしいです。

Build.scalaはトリッキーです - 私はそうのような共有の基本クラスを紹介したいと思います:Build.scalaで行うこと

abstract class MyBuildBase extends Build { ... } 

object ApplicationBuild extends MyBuildBuild { ... } 

これは、いずれかを作成するためにはMyBuildBase.scalaをプロジェクト間で共有する必要があります。これはディレクトリで動作するsvn:externalを使って行うことができます。これは、Build.scalaがコンパイルされたときに何とかこの共有ディレクトリにアクセス可能にする必要があることを意味します(そうでなければ、sbtは大声で言います)。

http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.htmlhttp://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full-Def.htmlを読むと、これが可能であるようです。

しかし実際にはproject/project/Build.scalaファイルに実際に何を入れて、実際にこれを実現するのかは私には明らかにわかりません - という例を見つけることはできません。ビルドファイルに ""という名前の追加ソースファイルが含まれています。

提案がありますか?

答えて

6

あなたがしたいことは、プラグインまたは共有ライブラリを作成することです。

はあなたのようには、以下のビルドでのsbtプロジェクトを行うことができます。

sbtPlugin := true 

organization := "you" 

name := "common-build" 

version := "1.0" 

build.sbtが続いsrc/main/scalaであなたの抽象クラス "MyBuildBase" を作成します。このプロジェクトをsbtプラグインとしてリリースします。

他のプロジェクトでは、これをライブラリ/プラグインとして使用できます。 project/plugins.sbtの追加:

addSbtPlugin("you" % "common-build" % "1.0") 

そして、あなたのビルドを構築するときに、これはあなたの一般的なビルドライブラリを解決します。

さらに詳しい情報が必要な場合は、sbtプラグインの詳細を参照し、プラグインを拡張するものの作成に関する部分を無視してください。プラグインは、sbtのバージョン番号とあなた自身のバージョン番号でバージョン管理されたライブラリです。ビルド間で共有したいコードを置くことができるはずです。

+0

優れた提案。 SVNはv1.6以来、ディレクトリだけでなく外部ファイルも扱えることが分かったので、私はそのように解決しました。しかし、あなたの答えは私が実際に尋ねた質問をカバーしています。 – Jxtps

0

注:2016年のBuild.scalaは非推奨です(Build.sbt)。

ここに新しい(Dec.2016)multi-module with App Scala sbt templateによってMichael Lewisである。

使用

sbt new lewismj/sbt-template.g8 

はその後、実行することができます。

sbt compile 
sbt publish-local 
sbt assembly 

それはScala SBT template (Library)

に基づいています

このgiter8テンプレートは、Scalaライブラリ用のSBTビルドファイルを作成します。