2011年11月15日

build.sbtについて(sbt)

build.sbtについて


build.sbtはビルド定義(build definition)するもの。ビルド定義ってのは、キー・バリューのリストで定義する。 記述方法は、

キー := 値

キーに対応する値の型は決まってるので違う型を設定すると無視される。キーは"sbt.Keys"で定義されている。build.sbtは自動的にコイツをimportしてるので"sbt.Keys.name"ではなく"name"と書ける。
sbt.Keys:https://github.com/harrah/xsbt/blob/0.11/main/Keys.scala

キーは3種類


・SettingKey[T]: プロジェクトロード時に一度だけ設定される値
・TaskKey[T]: 毎回計算される値。副作用あるよ
・InputKey[T]: コマンドライン引数を受けるキー
ちなみにsbtのインタラクティブモードで実行するcompile, runもTaskKeyなのだ。インタラクティブモードではTaskKeyの内容を実行できるのだ。

ライブラリ依存


sbtではライブラリ依存を定義する方法として2つある。
◆unmanaged dependencies(アンマネージ依存)
"lib/"にjarを直接置く方法。sbtで管理はしてくれないので特別な理由(リポジトリに無いとか)がない場合はマネージ依存を使う。
◆managed dependencies(マネージ依存)
build.sbtに

libraryDependencies += "org.apache.darby" % "derby" % "10.4.1.3"

と書けばApache Derbyライブラリのバージョン10.4.1.3を追加できる。バージョンを変更したければ"10.4.1.3"と修正して"sbt update"で終わり。sbtが自動的にダウンロードして組み込んでくれる。マジ便利。
・testの時だけ追加したいライブラリとかあるよね?(コンフィギュレーション毎の依存設定)
テスト用のライブラリとかtestコマンドの時だけ使うけど、mainでは使わないとかあるよね。その場合は、

libraryDependencies += "org.apache.darby" % "derby" % "10.4.1.3" % "test"

と最後に"% "test""をつければOK。
・リポジトリ追加
デフォルトで設定されているリポジトリには無いライブラリを使いたい場合は、リポジトリを追加できる

resolvers += "説明" at "リポジトリパス(http://〜, file://〜)"

プラグイン追加


/project/build 下記の記述を加える事でプラグインを追加できる。

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse" % "1.4.0")



posted by purigen at 11:00| Comment(0) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする

2011年11月14日

sbt基本メモ

sbt(simple-build-tool)についてメモ
公式系
・ソースコード:https://github.com/harrah/xsbt
・ドキュメント:https://github.com/harrah/xsbt/wiki
・メーリングリスト:http://groups.google.com/group/simple-build-tool
◆0.7系と0.10(0.11)系とは?
0.10系で結構色々変わったので(scala2.7.7→scala2.8.1とかsbt自体のアーキテクチャとか)、大人しく0.10(0.11)系を使うべし。
◆セットアップ方法は?
sbtのセットアップ方法(xuwei-kさんが日本語約作ってくださってる):https://gist.github.com/1139288(英語はhttp://code.google.com/p/simple-build-tool/wiki/Setup)
◆構成
こんな構成になるはず。

-project:プロジェクトの設定類が配置されるディレクトリ
-plugins:sbtのプラグインを配置する
build.properties:buildプロパティ
-lib:ライブラリ配置ディレクトリ
-src:ソースファイル置き場
-main:メインソース置き場
-resources:リソース置き場
-scala:scalaコード置き場
-java:javaコード置き場
-test:テストソース置き場
-resources:リソース置き場
-scala:scalaコード置き場
-java:javaコード置き場
sbt.bat:sbt実行用のバッチファイル
sbt-launch.jar:sbt本体
build.sbt:basic configurationの場合

◆Projectの定義方法
二種類あります。
・Full Configuration(https://github.com/harrah/xsbt/wiki/Full-Configuration)
projectディレクトリ配下に、"プロジェクト名.scala"(ファイル名はなんでもOK)を作成して、trait(sbt.Build)を継承したobjectを定義する。
sample

import sbt._
object MyBuild extends Build{
//rootディレクトリを宣言して、sub1との依存関係を宣言
lazy val root = Project("root", file(".")) aggregate(sub1)
//Sub1ディレクトリ
lazy val sub1: Project = Project("sub1", file("a")) dependsOn(sub2 % "test")
lazy val sub2: Project("sub2", file("b"), delegates = root :: Nil)
}

・Basic Configuration(https://github.com/harrah/xsbt/wiki/Basic-Configuration)
projectディレクトリ配下にbuild.sbtファイルを作成。

// Set the project name to the string 'My Project'
name := "My Project"
// The := method used in Name and Version is one of two fundamental methods.
// The other method is <<=
// All other initialization methods are implemented in terms of these.
version := "1.0"
// Add a single dependency
libraryDependencies += "junit" % "junit" % "4.8" % "test"
// Add multiple dependencies
libraryDependencies ++= Seq(
"net.databinder" %% "dispatch-google" % "0.7.8",
"net.databinder" %% "dispatch-meetup" % "0.7.8"
)
// Exclude backup files by default. This uses ~=, which accepts a function of
// type T => T (here T = FileFilter) that is applied to the existing value.
// A similar idea is overriding a member and applying a function to the super value:
// override lazy val defaultExcludes = f(super.defaultExcludes)
//
defaultExcludes ~= (filter => filter || "*~")
/* Some equivalent ways of writing this:
defaultExcludes ~= (_ || "*~")
defaultExcludes ~= ( (_: FileFilter) || "*~")
defaultExcludes ~= ( (filter: FileFilter) => filter || "*~")
*/
// Use the project version to determine the repository to publish to.
publishTo <<= version { (v: String) =>
if(v endsWith "-SNAPSHOT")
Some(ScalaToolsSnapshots)
else
Some(ScalaToolsReleases)
}

名前の通り基本はBasicの方で良いと思います。Basicでできない
 ・sbtをカスタマイズする
 ・サププロジェクトを定義する
場合はFullを使う。
◆Plugin
"project/plugins"に設定ファイルをおく。
posted by purigen at 11:00| Comment(1) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。