そもそもコンパイルが通らない。
[warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: UNRESOLVED DEPENDENCIES :: [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: play#sbt-plugin;2.0.3: not found [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] [warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes. [warn] play:sbt-plugin:2.0.3 (sbtVersion=0.12, scalaVersion=2.9.2) [warn] sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.0.3: not found
いくつか手を入れないといけなかったのでメモ。
- Play Framework の Migration Guide
-
Play! 2.0から2.1にアップデート - k4200’s notes and thoughts
アップデート作業について記載されている。今回はここにお世話になりました。
build.properties と plugins.sbt の修正
まずは、project ディレクトにある
build.properties
と
plugins.sbt
に記載されている
sbt と sbt-plugin のバージョンを修正する。
build.properties
sbt.version=0.12.2
plugins.sbt
// Comment to get more information during initialization
logLevel := Level.Warn
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("play" % "sbt-plugin" % "2.1.1")
もとの値は
0.11.3
と 2.0.3
。Migration Guide には sbt-plugin は 2.1.0 と記載されているが、 これは Play 2.1.0 の情報で今入れている Play は 2.1.1 なので、 sbt-plugin は 2.1.1 を指定する。
Play new hoge
で新規にプロジェクトを作ってそこからコピーするのが確実。
Build.scala
の修正
project ディレクトにある
Build.scala
を修正する。Play 2.0 の
PlayProject
オブジェクト が
Play 2.1 で play.Project
に変更になり、apply() の引数も変わったことに対する対応をする。dependencies も jdbc と anorm を明示的に指定する必要があるようになったのでこれも対応する。
Build.scala
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "sessiontest"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc, anorm
)
val main = play.Project(
appName, appVersion, appDependencies).settings(
// Add your own project settings here
)
}
play.Project() の引数は、Play 2.0 では第4引数に
mainLang = SCALA
を指定していたが、
これはなくなった。あとは、
play clean
をして play run
で動くはずなのだが、
Play 2.0 でのコンパイル済のファイルが残っている影響か、以前 eclipsify した影響か play.Project が見つからない旨のエラーがでて Build.scala のコンパイルに失敗するので、
.cache、.project、.classpath、.settings/、.target/、bin、target、project/project、project/target など、
Play 2.1 で存在しない2次的なファイルやフォルダを消すことで動作することができるようになった。
他にも Scala のバージョンが変わったことによる対応などが必要なこともあるようだが、 今回はこれだけで移行できた。
その他の詳細は上記のリンク先を参照。
無理に互換性がなくなるような変更をしなくてもよさそうな内容なのだが、 まだまだ発展途上でいろいろ変わるよ、ということなのだろうか?
play.Project
の謎
Build.scala の
play.Project()
のところは、
単に Project
と書いても動きそうなものだが、引数の型が違うというエラーになり、
コンパイルが通らない。どうもほかのクラス(オブジェクト)として解釈されているようだ。 気になったので調べてみた。
Build.scala の
main
の中身を少し細工して何が生成されているのかを見てみた。
val main = { val proj = play.Project(appName, appVersion, appDependencies).settings( // Add your own project settings here ); val name = Project("aaa", null).getClass().getName(); println (name); proj; }
sbt.Project$$anon$1
sbt.Project
だった。一般名詞にしてバッティングするなら、
PlayProject
にしておけばいいのに・・・
0 件のコメント:
コメントを投稿