4

私は Play 2.2 アプリケーションに取り組んでいますが、DB レイヤーを追加しようとしてから、状況が少し悪化しました。

以下は私のbuild.sbt依存関係です。ご覧のとおり、私は and を使用mysql-connector-javaしていplay-slickます:

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "joda-time" % "joda-time" % "2.3",
  "mysql" % "mysql-connector-java" % "5.1.26",
  "com.typesafe.play" %% "play-slick" % "0.5.0.8",
  "com.aetrion.flickr" % "flickrapi" % "1.1"
)

application.confはそれにいくつかの同様に単純なDBのものを持っています:

db.default.url="jdbc:mysql://localhost/myDb"
db.default.driver="com.mysql.jdbc.Driver"
db.default.user="root"
db.default.pass=""

Play サーバーが起動すると、次のようになります。

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

[info] Compiling 1 Scala source to C:\bbq\cats\in\space
[info] play - database [default] connected at jdbc:mysql://localhost/myDb
[info] play - Application started (Dev)

したがって、Play は MySQL DB に問題なく接続できるようです (私はそう思います)。ただし、サーバーにリクエストを行うと、次の例外が発生します。

[error] p.nettyException - Exception caught in Netty
java.lang.NoSuchMethodError: akka.actor.ActorSystem.dispatcher()Lscala/concurren
t/ExecutionContext;
        at play.core.Invoker$.<init>(Invoker.scala:24) ~[play_2.10.jar:2.2.0]
        at play.core.Invoker$.<clinit>(Invoker.scala) ~[play_2.10.jar:2.2.0]
        at play.api.libs.concurrent.Execution$Implicits$.defaultContext$lzycompu
te(Execution.scala:7) ~[play_2.10.jar:2.2.0]
        at play.api.libs.concurrent.Execution$Implicits$.defaultContext(Executio
n.scala:6) ~[play_2.10.jar:2.2.0]
        at play.api.libs.concurrent.Execution$.<init>(Execution.scala:10) ~[play
_2.10.jar:2.2.0]
        at play.api.libs.concurrent.Execution$.<clinit>(Execution.scala) ~[play_
2.10.jar:2.2.0]

奇妙なことは、2 番目の要求 (まったく同じ URL、同じコントローラー、変更なし) が別のエラーで返されることです。

[error] p.nettyException - Exception caught in Netty
java.lang.NoClassDefFoundError: Could not initialize class play.api.libs.concurr
ent.Execution$
        at play.core.server.netty.PlayDefaultUpstreamHandler.handleAction$1(Play
DefaultUpstreamHandler.scala:194) ~[play_2.10.jar:2.2.0]
        at play.core.server.netty.PlayDefaultUpstreamHandler.messageReceived(Pla
yDefaultUpstreamHandler.scala:169) ~[play_2.10.jar:2.2.0]
        at com.typesafe.netty.http.pipelining.HttpPipeliningHandler.messageRecei
ved(HttpPipeliningHandler.java:62) ~[netty-http-pipelining.jar:na]
        at org.jboss.netty.handler.codec.http.HttpContentDecoder.messageReceived
(HttpContentDecoder.java:108) ~[netty-3.6.5.Final.jar:na]
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:29
6) ~[netty-3.6.5.Final.jar:na]
        at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessage
Received(FrameDecoder.java:459) ~[netty-3.6.5.Final.jar:na]

私が要求している URL / コントローラーは、静的な Web ページをレンダリングするだけで、重要なことは何もしません。DBレイヤーの追加を開始する前は、問題なく機能していました。私はかなり立ち往生しています。どんな助けでも大歓迎です、ありがとう。

Scala 2.10.2、Play 2.2.0、および MySQL Server 5.6.14.0 (コミュニティ エディション) を使用しています。

4

1 に答える 1

6

なるほど、やっとわかった。私は少し馬鹿げているように感じますが、他の誰かに役立つかもしれないので、ここに投稿します:

私のプロジェクトの以前の作業中に、Mongo、BSON コンバーターなど、さまざまなことのために他の潜在的なライブラリを実験していました。もちろん、実験中に、それらを IDE のプロジェクト ライブラリの依存関係に追加していました (IntelliJ IDEA 12 を使用しています)。 . 当然、IntelliJ は JAR をダウンロードして、プロジェクトの lib ディレクトリに配置していました。ただし、使用したいライブラリを決定し、プロジェクトの依存関係から不要なものを削除した後、IntelliJはプロジェクトの lib ディレクトリから未使用の JAR を削除/クリーンアウトしませんでした。その結果、大量の不要な JAR が存在し、そのうちのいくつかはおそらく SBT ライブラリと競合していました。

つまり、Play プロジェクトの lib ディレクトリを一掃し、プロジェクトのライブラリの依存関係を IDE で再確認し、本当に必要な JAR のみを再インポートしました。

于 2013-10-18T03:22:23.907 に答える