0
votes

I have a completely functional Java Play 2.0.4 application working just fine that I'm trying to migrate to 2.1

I followed the Migration Guide and implemented all the changes. The app compiles and starts correctly. However, when I try to access any page I getting a NoSuchFieldError:

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.NoSuchFieldError: Application]]

Of course the Application controller exists and the route is defined in conf/routes (as it was before the migration on the working 2.0.4 version).

From the stack trace, I suspect it has something to do with the router. Here's the full trace:

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.NoSuchFieldError: Application]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.0]
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:132) [play_2.10.jar:2.1.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:128) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.0]
java.lang.RuntimeException: java.lang.NoSuchFieldError: Application
at play.libs.F$Promise$6.apply(F.java:401) ~[play_2.10.jar:2.1.0]
at scala.concurrent.Future$$anonfun$map$1.liftedTree2$1(Future.scala:253) ~[scala-library.jar:na]
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:249) ~[scala-library.jar:na]
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:249) ~[scala-library.jar:na]
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:29) ~[scala-library.jar:na]
at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.liftedTree1$1(BatchingExecutor.scala:67) ~[akka-actor_2.10.jar:na]
Caused by: java.lang.NoSuchFieldError: Application
at views.html.login$.apply(login.template.scala:54) ~[na:na]
at views.html.login$.render(login.template.scala:109) ~[na:na]
at views.html.login.render(login.template.scala) ~[na:na]
at controllers.Application.login(Application.java:38) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(routes_routing.scala:241) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(routes_routing.scala:241) ~[na:na]  

And this is my Build.scala file:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

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

    val appDependencies = Seq(
        javaCore,
        javaJdbc,
        javaEbean,
        "org.apache.xmlrpc" % "xmlrpc" % "3.0",
        "commons-httpclient" % "commons-httpclient" % "3.1",
        "com.google.code.gson" % "gson" % "2.2.2",
        "junit" % "junit" % "4.11",
        "org.mongodb" % "mongo-java-driver" % "2.8.0",
        "org.jongo" % "jongo" % "0.3",
        "mysql" % "mysql-connector-java" % "5.1.22",
        "com.typesafe" %% "play-plugins-mailer" % "2.1.0",
        "be.objectify" %% "deadbolt-java" % "2.1-RC2"
    )

    val main = play.Project(appName, appVersion, appDependencies).settings(
        resolvers += Resolver.url("My GitHub Play Repository", url("http://alexanderjarvis.github.com/releases/"))(Resolver.ivyStylePatterns),
        resolvers += Resolver.url("Objectify Play Repository", url("http://schaloner.github.com/releases/"))(Resolver.ivyStylePatterns),
        resolvers += Resolver.url("Objectify Play Snapshot Repository", url("http://schaloner.github.com/snapshots/"))(Resolver.ivyStylePatterns)
    )
}

I can“t get the app up and running.

Any ideas? Thanks!

Update: I added the full Build.scala file for reference.

1
Show us the whole Build.scala file. - maba
I added the whole file @maba in the question. - monsieurBelbo
The error message is mentioning NoSuchFieldError so what about the template file. Do you have any references to a field called Application? - maba
The are references to routes of certain controllers, such as routes.Application.login(). Needless to say, these controllers and action exist (in fact this is the Application controller. - monsieurBelbo
Also, this error occurs only running the app with play run but not with play start - monsieurBelbo

1 Answers

0
votes

This problem is related to this Play Framework Bug: https://github.com/playframework/Play20/issues/822

Basically the classloader does not behave the same in DEV and PROD

Please go to the Bug Report and show your support for it being fixed.