grails / grails-core

The Grails Web Application Framework
http://grails.org
Apache License 2.0
2.78k stars 950 forks source link

bootRun with a rest-api profile app throws Unable to load class org.grails.web.sitemesh.GroovyPageLayoutFinder #11170

Closed sdelamo closed 5 years ago

sdelamo commented 5 years ago

Steps to reproduce

clone: https://github.com/grails-guides/rest-hibernate

branch grails-4

General error during instruction selection: java.lang.NoClassDefFoundError: Unable to load class org.grails.web.sitemesh.GroovyPageLayoutFinder due to missing dependency com/opensymphony/module/sitemesh/Page

java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load class org.grails.web.sitemesh.GroovyPageLayoutFinder due to missing dependency com/opensymphony/module/sitemesh/Page
    at org.codehaus.groovy.control.CompilationUnit.convertUncaughtExceptionToCompilationError(CompilationUnit.java:1129)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1109)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:649)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:627)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:604)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:583)
    at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:179)
    at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:57)
    at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:80)
    at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:68)
    at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerCallable.call(AbstractDaemonCompiler.java:86)
    at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerCallable.call(AbstractDaemonCompiler.java:74)
    at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:42)
    at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:102)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: Unable to load class org.grails.web.sitemesh.GroovyPageLayoutFinder due to missing dependency com/opensymphony/module/sitemesh/Page
    at org.codehaus.groovy.vmplugin.v5.Java5.configureClassNode(Java5.java:408)
    at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:280)
    at org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1030)
    at org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1024)
    at org.codehaus.groovy.ast.ClassNode.getSuperClass(ClassNode.java:1018)
    at org.codehaus.groovy.ast.ClassNode.isDerivedFrom(ClassNode.java:961)
    at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isAssignableTo(StaticTypeCheckingSupport.java:470)
    at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.allParametersAndArgumentsMatch(StaticTypeCheckingSupport.java:362)
    at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.measureParametersAndArgumentsDistance(StaticTypeCheckingSupport.java:1131)
    at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.chooseBestMethod(StaticTypeCheckingSupport.java:1100)
    at org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findDGMMethodsByNameAndArguments(StaticTypeCheckingSupport.java:1023)

Environment Information

sdelamo commented 5 years ago

There is a workaround which is to add as a dependency compile 'opensymphony:sitemesh:2.4.2'

ilopmar commented 5 years ago

Another workaround is using grails-gsp 4.0.0.BUILD-SNAPSHOT as in #11169 but we need to investigate why GSP dependencies are needed/used in a rest-api application.

sdelamo commented 5 years ago

https://github.com/grails-guides/rest-hibernateGrails Guide is already working with Grails 4.0.0 I have pushed a working copy to grails-4 branch.