2014年3月1日土曜日

PlayFrameworkで会員制ギャラリーサイトを作る習作:Play2.2.xで@NotNullアノテーションについて調べたこと

Play Framework 2.2.1がリリースされましたね。

さて、PlayFramework 2.1で使えていた@NotNullアノテーションが2.2で開発をした時にエラーを吐くようになりました。
その解決方法についていろいろ調べて詰まったので、備忘録として控えておきます。

まず結論から言うと、
Play! 2.1 アプリを Play! 2.2 に移行した作業の覚え書き

@NotNullアノテーション がなくなった
の節にある以下の様な書き換えで対応するのが良いようです。

2.1
import com.avaje.ebean.validation.NotNull;
2.2
import javax.validation.constraints.NotNull;
ここに至るまでに試行錯誤した結果を書いておきます。

2.1で使えていた@NotNullアノテーションをそのまま移植

そのまま使おうとすると、ビルドの際にエラーが出るようになりました。

build.sbtにavaje-ebeanorm-apiを追記してみる

調べてみると、どうやら
avaje-ebeanorm-api is not in the list of SBT dependencies
ということだそうで、EBeanの依存関係のバグでMaven Repositoryで自動取得してくれないようなので、build.sbtに以下を追記するようなので追記してみることにしました。

  "org.avaje.ebeanorm" % "avaje-ebeanorm-api" % "3.1.1"

https://groups.google.com/forum/#!topic/play-framework/aEglzIVCnH8
https://groups.google.com/forum/#!msg/play-framework/azlPQ14XJ2I/tdOKUkYVAxAJ

build.sbtの追記をやっぱり辞める

再度ビルドすると今度は新たなエラーが

Exception in thread "main" java.lang.NoSuchMethodError: com.avaje.ebean.config.AutofetchConfig.isGarbageCollectionOnShutdown()Z

http://stackoverflow.com/questions/20520456/java-lang-nosuchmethoderror-is-chasing-me-at-cloudbees 
を見ると、
isGarbageCollectionOnShutdown
メソッドはEBean の2.6.0系には存在しないメソッドで、3.2.2で存在しているメソッドだそうです。
また、

Looks like conflicting version of same jar in classpath
とあるように、そもそもPlay Framework 2.2系で使用しているEBeanのバージョンと
avaje-ebeanorm-apiのバージョンが混在しているのがいけないっぽい。

改めて
http://cs.hatenablog.jp/entry/2013/12/15/234618
を見てみると、

2.2ではEBeanが3.2.2になっています。
とあるので、できればavaje-ebeanorm-apiも3.2.2系にできればいいんだが、
http://mvnrepository.com/artifact/org.avaje.ebeanorm/avaje-ebeanorm-api
だと、3.1.1しかリリースされてない。。。

さらにGithubを見ると、
https://github.com/ebean-orm
のリポジトリ、
deprecated-avaje-ebeanorm-api
になってる・・・。

ということで、
2.2系では

import javax.validation.constraints.NotNull;
にするという結論になりました。以上。



0 件のコメント:

コメントを投稿