前書き

Playで依存するjarを追加してみる。

Play2.0.4。

@CretedDate 2012/10/25
@Versions Scala2.9.2 Play2.0.4

サンプルアプリの用意

とりあえずなんかプロジェクト作る。

$ play play_example
$ cd play_example

方法1. libに放り込む

Play2.0のライブラリ管理はSBTが利用されている。

SBTはlibディレクトリにあるjarをクラスパスに追加してくれる。

ので必要なjarをlibの中に放り込めば、app配下のソースからjarのクラスが呼べるようになる。

とりあえずlibディレクトリ作成。

$ mkdir lib

試しにcommons-ioのjarを落としてきて、libディレクトリに入れてみる。

その状態で、appから適当にcommons-ioのコードを呼んでみる。

$ vi app/controllers/Application.scala

def indexに太字の部分を追加。

  def index = Action {
    org.apache.commons.io.FileUtils.touch(new java.io.File("temp_file.txt"))
    Ok(views.html.index("Your new application is ready."))
  }

これでplay runしてhttp://localhost:9000/を見ると、ちゃんとコンパイルが通ってcommons-ioのコードが呼び出せる。

既にplay runしてる場合は立ち上げ直さないと反映されない。

Eclipseで開発してる場合は再度eclipsifyすると反映される。

方法2. project/Build.scalaに書く

こっちの方が一般的なやり方。

試しにcommons-ioを依存ライブラリに指定してみる。

project/Build.scalaにappDependenciesというメソッドがある。

    val appDependencies = Seq(
      // Add your project dependencies here,
    )

ここのAdd your project dependenciesのところにライブラリの情報を記述する。

commons-ioはMavenのセントラルにいるので、mavenrepository.comでSBTのタブを選択すれば、グループとかバージョンとかの書き方が分かる。

下記のように書けばいいらしい。

"commons-io" % "commons-io" % "2.4"

こんな感じで書く。

    val appDependencies = Seq(
      // Add your project dependencies here,
      "commons-io" % "commons-io" % "2.4"
    )

Build.scalaはそれ自体がScalaのコードで、appDependenciesの型はSeqなので、複数指定する際は下記のようにカンマ区切りで書いていけば良い。

    val appDependencies = Seq(
      // Add your project dependencies here,
      "commons-io" % "commons-io" % "2.4",
      "org.apache.commons" % "commons-compress" % "1.4.1"
    )

libディレクトリに入れた時と同じで、反映させるにはサーバを立ち上げ直すとか、「えくりぷしふぁい! えくりぷしふぁい! 」と唱える必要がある。

Mavenセントラル以外のレポジトリを利用する場合

Mavenのセントラルレポジトリにいる子ならレポジトリの情報を明記しなくても呼べる。

独自のレポジトリを利用しているライブラリを呼ぶ場合は、そのレポジトリの設定を明記しないといけない。

試しに形態素解析ライブラリのKuromojiを入れてみる。Kuromojiのレポジトリは下記URL。

http://www.atilika.org/nexus/content/repositories/atilika

依存性解決時にこのレポジトリを見に行くには、mainでresolversにURLを追加してあげれば良いらしい。

    val appDependencies = Seq(
      // Add your project dependencies here
      "org.atilika.kuromoji" % "kuromoji" % "0.7.7"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here
      resolvers += "Atilika Open Source repository" at "http://www.atilika.org/nexus/content/repositories/atilika"
    )

これで独自レポジトリでも見に行けるようになった。