ripper234
ripper234

Reputation: 230098

"groovy.lang.MissingFieldException: No such field: metaClass for class: java.lang.Class" error in Play Framework

We're running play 1.2.4 (mbknor-3 version) on our ubuntu CI server, Java 7.

Today, for no apparent reason, we started getting these errors on all branches, even those where no code was committed, and a previous build had completed successfully.

The error is happening when I do play start and then curl localhost:9000. I've tried running play clean and play deps --sync, and rebooting the server, and also verified the server didn't run out of harddrive space.

Any idea what could cause this? How to debug it?

2012-06-11 08:47:51,255 INFO  (play) ~ Starting /home/ubuntu/programs/teamcity/buildAgent/work/a9561c50f06f33d5/portal/src
2012-06-11 08:47:51,259 INFO  (play) ~ Module less is available (/home/ubuntu/programs/teamcity/buildAgent/work/a9561c50f06f33d5/portal/src/modules/less-0.9)
2012-06-11 08:47:51,260 INFO  (play) ~ Module secure is available (/home/ubuntu/programs/play/play-1.2.4-mbknor-3/modules/secure)
2012-06-11 08:47:51,261 INFO  (play) ~ Module crud is available (/home/ubuntu/programs/play/play-1.2.4-mbknor-3/modules/crud)
2012-06-11 08:47:53,608 DEBUG (com.asual.lesscss.LessEngine) ~ Initializing LESS Engine.
2012-06-11 08:47:53,945 DEBUG (com.asual.lesscss.LessEngine) ~ Using implementation version: Rhino 1.7 release 3 2011 07 19
2012-06-11 08:47:55,396 WARN  (play) ~ You're running Play! in DEV mode
2012-06-11 08:47:55,716 INFO  (play) ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
2012-06-11 08:48:04,566 ERROR (play) ~

@6ajlb3agi
Internal Server Error (500) for request GET /

Oops: ExceptionInInitializerError
An unexpected error occured caused by exception ExceptionInInitializerError: null

play.exceptions.UnexpectedException: Unexpected Error
        at play.Invoker$Invocation.onException(Invoker.java:244)
        at play.Invoker$Invocation.run(Invoker.java:286)
        at Invocation.HTTP Request(Play!)
Caused by: java.lang.ExceptionInInitializerError
        at play.templates.TemplateLoader.load(TemplateLoader.java:78)
        at play.mvc.Router.parse(Router.java:162)
        at play.mvc.Router.parse(Router.java:190)
        at play.mvc.Router.parse(Router.java:164)
        at play.mvc.Router.load(Router.java:48)
        at play.mvc.Router.detectChanges(Router.java:219)
        ... 1 more
Caused by: groovy.lang.MissingFieldException: No such field: metaClass for class: java.lang.Class
        at groovy.lang.MetaClassImpl.getAttribute(MetaClassImpl.java:1074)
        at groovy.lang.MetaClassImpl.getStaticProperty(MetaClassImpl.java:1308)
        at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:707)
        at org.codehaus.groovy.runtime.Invoker.getProperty(Invoker.java:727)
        at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:206)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:295)
        at Script1.run(Script1.groovy:1)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:521)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:496)
        at play.templates.GroovyTemplate.<clinit>(GroovyTemplate.java:62)
        ... 7 more
2012-06-11 08:48:04,569 ERROR (play) ~ Error during the 500 response generation
java.lang.NoClassDefFoundError: Could not initialize class play.templates.GroovyTemplate
        at play.templates.TemplateLoader.load(TemplateLoader.java:78)
        at play.templates.TemplateLoader.load(TemplateLoader.java:172)
        at play.server.PlayHandler.serve500(PlayHandler.java:778)
        at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:237)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

Upvotes: 0

Views: 3232

Answers (1)

ripper234
ripper234

Reputation: 230098

This is a weird problem, but I have a resolution.

The problem seems to be caused by a jar collision with the - groovy -> groovy-all-1.0-jsr 05 dependency.

  1. I added this dependency to my project a long time ago, in order to run groovy scripts from my project.
  2. Since then, it seems this dependency is no longer necessary for my project.
  3. In fact, my project's build has been ignoring this dependency for quite some time:

:: problems summary :: :::: WARNINGS ::::::::::::::::::::::::::::::::::::::::::::::

  ::          UNRESOLVED DEPENDENCIES         ::

  ::::::::::::::::::::::::::::::::::::::::::::::

  :: groovy#groovy-all-1.0-jsr;05: java.text.ParseException:

inconsistent module descriptor file found in 'http://repo1.maven.org/maven2/groovy/groovy-all-1.0-jsr/05/groovy-all-1.0-jsr-05.pom': bad module name: expected='groovy-all-1.0-jsr' found='groovy-all'; bad revision: expected='05' found='1.0-jsr-05';

  ::::::::::::::::::::::::::::::::::::::::::::::

:::: ERRORS mavenCentral: bad module name found in http://repo1.maven.org/maven2/groovy/groovy-all-1.0-jsr/05/groovy-all-1.0-jsr-05.pom: expected='groovy-all-1.0-jsr found='groovy-all'

  mavenCentral: bad revision found in

http://repo1.maven.org/maven2/groovy/groovy-all-1.0-jsr/05/groovy-all-1.0-jsr-05.pom: expected='05 found='1.0-jsr-05'

  1. Yesterday, for some voodoo reason, on our CI machine (and no other machine), this dependency started resolving correctly, fetching this file, and causing class loading issues. This is rather unsettling, as I still don't know what has changed, and I'm a bit concerned this could happen to our production machines.

The resolution was getting rid of this dependency.

Upvotes: 2

Related Questions