読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

play frameworkにgoogle guavaを追加する

java ライブラリ play

Home — Playframework
最近触りだしたplayです。
google guava
そしてこのgooglejavaライブラリである、guavaを組み込もうとしたところ、少しはまりました。
guavaですが、今までapacheのcommons-lang、io、collections.等を使っていましたが それを更に便利に今風にしたもので、おすすめなのです。

dependenciesにguavaを追加する
まず、$PROJECT_HOME/project/Build.scala を開きます。
val appDependencies = Seq( の部分を以下のように修正します。

val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.20"
      ,"com.google.guava" % "guava" % "13.0"
    )

play compileする

$ play
[info] Loading project definition from /Applications/eclipse/workspace/treefigure-front/project
[info] Set current project to treefigure-front (in build file:/Applications/eclipse/workspace/treefigure-front/)
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0.2, http://www.playframework.org

> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[treefigure-front] $ compile
[info] Updating {file:/Applications/eclipse/workspace/treefigure-front/}treefigure-front...
[info] Done updating.                                                                  
[success] Total time: 3 s, completed 2012/08/26 19:13:41

うまくいきました。

play startする

[treefigure-front] $ start
(Starting server. Type Ctrl+D to exit logs, the server will remain in background)
Play server process ID is 591
[info] play - database [default] connected at jdbc:mysql://localhost/treefigure?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
Oops, cannot start the server.
java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.maximumSize(I)Lcom/google/common/cache/CacheBuilder;
    at org.reflections.adapters.JavassistAdapter.(JavassistAdapter.java:28)
	at org.reflections.util.ConfigurationBuilder.(ConfigurationBuilder.java:41)
	at play.api.Application.getTypesAnnotatedWith(Application.scala:263)
	at play.Application.getTypesAnnotatedWith(Application.java:102)
	at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:61)
	at play.api.Play$$anonfun$start$1.apply(Play.scala:60)
	at play.api.Play$$anonfun$start$1.apply(Play.scala:60)
	at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
	at scala.collection.immutable.List.foreach(List.scala:45)
	at play.api.Play$.start(Play.scala:60)
	at play.core.StaticApplication.(ApplicationProvider.scala:51)
	at play.core.server.NettyServer$.createServer(NettyServer.scala:132)
	at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:153)
	at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:152)
	at scala.Option.map(Option.scala:133)
	at play.core.server.NettyServer$.main(NettyServer.scala:152)
	at play.core.server.NettyServer.main(NettyServer.scala)

NoSuchMethodErrorとな。。まじか。依存性を解決してくれたんじゃないのか。。。

原因を探ります。
at org.reflections.adapters.JavassistAdapter.(JavassistAdapter.java:28)
むむむ。これかな。ggr。
org.reflections
あった!これか。

dependenciesにreflectionsを追加する

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.20"
      ,"com.google.guava" % "guava" % "13.0"
      ,"org.reflections" % "reflections" % "0.9.8"
    )

追加しました。これいけるかな。

play compileする

[treefigure-front] $ compile
[info] Updating {file:/Applications/eclipse/workspace/treefigure-front/}treefigure-front...
[info] Done updating.                                                                  
[success] Total time: 3 s, completed 2012/08/26 19:57:16

よし。

play startする

[treefigure-front] $ start
(Starting server. Type Ctrl+D to exit logs, the server will remain in background)

キター!

それにしてもこの現象、ggrと結構前のバージョンから起きてるみたいですね。
解決してよグーグル先生。。