§ライブラリ依存性の管理
§管理されない依存性
ほとんどの開発者は最終的には「管理された依存性」を利用することになりますが、最初は「管理されない依存性」から始めた方がわかりやすいこともあります。
「管理されない依存性」は次のように利用します: プロジェクトルートに lib/
ディレクトリを作成し、このディレクトリに jar ファイルを追加します。これらは自動的にアプリケーションのクラスパスに追加されます。これだけです!
この場合、build.sbt
へ依存性を記述する必要はありませんが、lib
以外の場所に JAR ファイルを入れたい場合は、設定キーを変更することができます。
§管理された依存性
Play は「管理された依存性」を実現するために、Apache Ivy を利用しています。もし、Maven や Ivy に詳しければ、特に困ることはないでしょう。
たいていの場合は、依存モジュールを build.sbt
ファイルへリストアップするだけでよいでしょう。
依存性の定義は、次のように書きます。(group
、artifact
、revision
を定義します。)
libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"
または、任意で指定できる configuration
を付け足すことができます。
libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3" % "test"
複数の依存性は上記のように複数の定義によって追加することもできますし、Scala のシーケンスを提供することもできます:
libraryDependencies ++= Seq(
"org.apache.derby" % "derby" % "10.4.1.3",
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final"
)
sbt (内部で Ivy を使っています) は、モジュールのダウンロード元を知っている必要があります。モジュールが sbt に組み込まれたデフォルトのレポジトリのいずれかに含まれていれば、特に何もしなくても動きます。
§%%
を使って適切な Scala バージョンを選択する
groupID % artifactID % revision
のかわりに、groupID %% artifactID % revision
というというように、groupID の後に %
を二つ重ねて記述することで、sbt はプロジェクトに設定された Scala バージョンに対応したアーティファクトをダウンロードしてくれます。
これは単なるショートカットであり、%%
を使わずに書くこともできます。
val appDependencies = Seq(
"org.scala-tools" % "scala-stm_2.9.1" % "0.3"
)
例えば、ビルドファイルで scalaVersion
に 2.9.1
を指定している場合、次の定義も全く同じ意味になります。
val appDependencies = Seq(
"org.scala-tools" %% "scala-stm" % "0.3"
)
§リゾルバ
sbt は、標準 Maven2 レポジトリと、Typesafe Releases レポジトリ (http://repo.typesafe.com/typesafe/releases) をデフォルトとして利用します。定義した依存モジュールがデフォルトのレポジトリに無い場合は、Ivy がモジュールを探せるように、リゾルバを自分で追加してやる必要があります。
resolvers
という設定キーを使って独自のリゾルバを追加します。
resolvers += name at location
例えば、
resolvers += "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"
ローカルに Maven レポジトリを作成しておき、sbt に検索させることも可能です。
resolvers += (
"Local Maven Repository" at "file:///"+Path.userHome.absolutePath+"/.m2/repository"
)
Next: サブプロジェクト