2014年7月3日木曜日

PlayFramework 2.3.1 with Scala 2.11.1 へプロジェクトをアップグレードした時のメモ

最近、ScalaもPlayもいろいろアップデートしていて速くなったとか(Scala)、速くなったとか(Play)言っているから、
{まあ、入れてみるか}
とやってみたら、以前のプロジェクト(Play2.2.x with Scala2.10.x)をアップグレードしようとした時いろいろややこしかったので、別のプロジェクトをやるときに絶対忘れそうなのでメモっておく。

まず、新しいPlayとScalaを公式ページでdownloadしようとすると、activatorなるものをインストールするように誘導された。
{activatorってなんじゃい}
完全に浦島太郎状態。どうやら、Scala, Play, Akkaやらサンプルやらwebエディターやらwebデバッガーやらセットになっていて、これ入れれば全部OKみたいなものらしい。
しかもplayコマンドとかsbtコマンドとか、全部 activator コマンドでやれということらしい。
で、activatorインストール後、今までのPlayのprojectフォルダに行って、
activator compile
とかいきなりやったけど、エラーの山。
{ま、そりゃそうだよな。しかたないか。}
なので、projectのファイルを色々変更した。

まず、project/plugin.sbt のplayのバージョンを以下のように変更
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.1")
次に、project/build.propertiesのsbtバージョンを以下のように変更
sbt.version=0.13.5
そんで、project/Build.scalaをこのサイトのSbt sampleを参考にこんな感じ変えてみた。
import sbt._
import Keys._

object ApplicationBuild extends Build {

  val appName         = "xxxxx"
  val appVersion      = "1.0-SNAPSHOT"

  val main = Project(appName, file(".")).enablePlugins(play.PlayScala).settings(
    version := appVersion,
    scalaVersion := "2.11.1",
    libraryDependencies := {
   CrossVersion.partialVersion(scalaVersion.value) match {
     // if scala 2.11+ is used, add dependency on scala-xml module
     case Some((2, scalaMajor)) if scalaMajor >= 11 =>
       libraryDependencies.value ++ Seq(
         "org.scala-lang.modules" %% "scala-xml" % "1.0.1",
         "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.1",
         "org.scala-lang.modules" %% "scala-swing" % "1.0.1",
         "com.github.scala-incubator.io" %% "scala-io-file" % "0.4.3-1")
     case _ =>
       // or just libraryDependencies.value if you don't depend on scala-swing
       libraryDependencies.value :+ "org.scala-lang" % "scala-swing" % scalaVersion.value
   }
 },   
 scalacOptions += "-feature"
  )

}
参考ページのコードに追加したのは、scalaxのscala-io-fileの部分、モジュール名とかバージョンとかわからなかったけど、MVNRepositorysというサイトから持ってきた。このサイトは知らなかったけど、こういうときはメチャメチャ便利なところ。

これでとりあえず動くようになった。