§ライブラリ依存性の管理
§管理されない依存性
ほとんどの開発者は最終的には「管理された依存性」を利用することになりますが、最初は「管理されない依存性」から始めた方がわかりやすいこともあります。
「管理されない依存性」は次のように利用します: プロジェクトルートに lib/
ディレクトリを作成し、このディレクトリに jar ファイルを追加します。これらは自動的にアプリケーションのクラスパスに追加されます。これだけです!
この場合、project/Build.scala
へ依存性を記述する必要もありません。ただし、lib/
以外の場所に JAR ファイルを入れたい場合は、project/Build.scala
にそのような設定を入れてもよいでしょう。
§管理された依存性
Play 2.0 は「管理された依存性」を実現するために、Apache Ivy を利用しています。もし、Maven や Ivy に詳しければ、特に困ることはないでしょう。
たいていの場合は、依存モジュールを project/Build.scala
へリストアップするだけでよいでしょう。必要であれば、Maven の POM ファイルや Ivy の設定ファイルに依存モジュールを書いて、それを sbt から読ませることもできます。
依存性の定義は、次のように書きます。(group
、artifact
、revision
を定義します。)
val appDependencies = Seq(
"org.apache.derby" % "derby" % "10.4.1.3"
)
または、任意で指定できる configuration
を付け足すことができます。
val appDependencies = Seq(
"org.apache.derby" % "derby" % "10.4.1.3" % "test"
)
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 レポジトリと、Scala Tools Releases レポジトリ (http://scala-tools.org/repo-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"
)
§まとめ
標準外のリゾルバと、いくつかの管理された依存性を含むプロジェクトの定義例を示します。
import sbt._
import Keys._
import PlayProject._
object ApplicationBuild extends Build {
val appName = "My first application"
val appVersion = "1.0"
val appDependencies = Seq(
"org.scala-tools" %% "scala-stm" % "0.3",
"org.apache.derby" % "derby" % "10.4.1.3" % "test"
)
val main = PlayProject(appName, appVersion, appDependencies).settings(defaultScalaSettings:_*).settings(
resolvers += "JBoss repository" at "https://repository.jboss.org/nexus/content/repositories/",
resolvers += "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"
)
}
Next: サブプロジェクト