Groovy 5 support
Issue description
This ticket will track issues with upgrading Grails to Groovy 5.
Compilation errors
Groovy 5 updated the Groovy shell
/home/runner/work/grails-core/grails-core/grails-console/src/main/groovy/grails/ui/shell/support/GroovyshApplicationContext.groovy: 21: unable to resolve class org.apache.groovy.groovysh.Groovysh
> Task :grails-console:compileGroovy
@ line 21, column 8.
import org.apache.groovy.groovysh.Groovysh
^
/home/runner/work/grails-core/grails-core/grails-console/src/main/groovy/grails/ui/shell/support/GroovyshWebApplicationContext.groovy: 23: unable to resolve class org.apache.groovy.groovysh.Groovysh
@ line 23, column 8.
import org.apache.groovy.groovysh.Groovysh
^
2 errors
Spock
Spock does not currently support Groovy 5
- A discussion is started at https://github.com/spockframework/spock/discussions/2160
Branch/PR for upgrading to Groovy 5 (when the time comes): #14737
Another error in the latest groovy snapshot:
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':grails-datastore-core:compileGroovy'.
> Unrecoverable compilation error: startup failed:
General error during conversion: The interface Collection cannot be implemented more than once with different arguments: java.util.Collection<java.lang.Object> and java.util.Collection
. At [30:1]
org.codehaus.groovy.syntax.RuntimeParserException: The interface Collection cannot be implemented more than once with different arguments: java.util.Collection<java.lang.Object> and java.util.Collection
. At [30:1]
at org.codehaus.groovy.classgen.Verifier.checkForDuplicateInterfaces(Verifier.java:409)
at org.codehaus.groovy.classgen.Verifier.visitClass(Verifier.java:235)
at org.codehaus.groovy.tools.javac.JavaStubGenerator$1.visitClass(JavaStubGenerator.java:236)
at org.codehaus.groovy.tools.javac.JavaStubGenerator.printClassContents(JavaStubGenerator.java:331)
at org.codehaus.groovy.tools.javac.JavaStubGenerator.generateStubContent(JavaStubGenerator.java:204)
at org.codehaus.groovy.tools.javac.JavaStubGenerator.generateFileStub(JavaStubGenerator.java:181)
at org.codehaus.groovy.tools.javac.JavaStubGenerator.generateClass(JavaStubGenerator.java:161)
at org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit.lambda$new$2(JavaAwareCompilationUnit.java:111)
at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:920)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:666)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:640)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:621)
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:285)
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:67)
at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:115)
at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:99)
at org.gradle.api.internal.tasks.compile.daemon.AbstractIsolatedCompilerWorkerExecutor$CompilerWorkAction.execute(AbstractIsolatedCompilerWorkerExecutor.java:78)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:108)
at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:77)
at org.gradle.process.internal.worker.request.WorkerAction.lambda$run$1(WorkerAction.java:150)
at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
at org.gradle.process.internal.worker.request.WorkerAction.lambda$run$2(WorkerAction.java:150)
at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85)
at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:142)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
1 error
==============================================================================
Another error in the latest groovy snapshot
I have created a ticket in the Groovy bug tracker for this error. https://issues.apache.org/jira/browse/GROOVY-11736
GPathResultMapSpec > Test nested elements FAILED groovy.lang.MissingFieldException: No such field: id for class: groovy.xml.slurpersupport.NodeChild at org.grails.databinding.xml.GPathResultMap.<init>(GPathResultMap.groovy:35) at org.grails.databinding.xml.GPathResultMapSpec.Test nested elements(GPathResultMapSpec.groovy:44)Discussion: https://lists.apache.org/thread/9qz4xsmw702tgt45f2y8xz5h8ftj4tyl
This issue has been resolved in Groovy 5.0.1 🎉
Execution failed for task ':grails-datamapping-core:compileGroovy'. > BUG! exception in phase 'semantic analysis' in source unit '/home/mattias/Projects/grails/grails-core/grails-datamapping-> core/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy' ClassNode#getTypeClass for org.grails.datastore.gorm.GormEntityApi called before the type class is set
This issue has been resolved in Groovy 5.0.1 🎉
Execution failed for task ':grails-datastore-core:compileGroovy'. > Unrecoverable compilation error: startup failed: General error during conversion: The interface Collection cannot be implemented more than once with different >arguments: java.util.Collection<java.lang.Object> and java.util.Collection . At [30:1] org.codehaus.groovy.syntax.RuntimeParserException: The interface Collection cannot be implemented more than once with different arguments: java.util.Collection<java.lang.Object> and java.util.Collection
This issue has been resolved in Groovy 5.0.1 🎉
Error: java.lang.ClassCastException: class org.codehaus.groovy.ast.ClassNode cannot be cast to class org.codehaus.groovy.ast.InnerClassNode
Build scan: https://ge.grails.org/s/qzyrkrxky2xeu
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':grails-datastore-core:compileTestGroovy'. > BUG! exception in phase 'semantic analysis' in source unit '/home/mattias/Projects/grails-core/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/model/JpaMappingSyntaxTests.groovy' class org.codehaus.groovy.ast.ClassNode cannot be cast to class org.codehaus.groovy.ast.InnerClassNode (org.codehaus.groovy.ast.ClassNode and org.codehaus.groovy.ast.InnerClassNode are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6cd5cc65) * Try: > Run with --info or --debug option to get more log output. > Get more help at https://help.gradle.org. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':grails-datastore-core:compileTestGroovy'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:293) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116) at org.gradle.api.internal.tasks.execution.ProblemsTaskPathTrackingTaskExecuter.execute(ProblemsTaskPathTrackingTaskExecuter.java:41) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314) at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:459) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:376) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) Caused by: BUG! exception in phase 'semantic analysis' in source unit '/home/mattias/Projects/grails-core/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/model/JpaMappingSyntaxTests.groovy' class org.codehaus.groovy.ast.ClassNode cannot be cast to class org.codehaus.groovy.ast.InnerClassNode (org.codehaus.groovy.ast.ClassNode and org.codehaus.groovy.ast.InnerClassNode are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6cd5cc65) at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:285) at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:67) at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:115) at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:99) at org.gradle.api.internal.tasks.compile.daemon.AbstractIsolatedCompilerWorkerExecutor$CompilerWorkAction.execute(AbstractIsolatedCompilerWorkerExecutor.java:78) at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54) at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48) at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48) at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49) at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30) at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:108) at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:77) at org.gradle.process.internal.worker.request.WorkerAction.lambda$run$1(WorkerAction.java:150) at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41) at org.gradle.process.internal.worker.request.WorkerAction.lambda$run$2(WorkerAction.java:150) at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85) at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:142) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) Caused by: java.lang.ClassCastException: class org.codehaus.groovy.ast.ClassNode cannot be cast to class org.codehaus.groovy.ast.InnerClassNode (org.codehaus.groovy.ast.ClassNode and org.codehaus.groovy.ast.InnerClassNode are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6cd5cc65) at org.grails.compiler.gorm.GormEntityTransformation.visit(GormEntityTransformation.groovy:163) at org.grails.compiler.gorm.JpaGormEntityTransformation.visit(JpaGormEntityTransformation.groovy:69) at org.grails.compiler.gorm.GlobalJpaEntityTransform.visitClass(GlobalJpaEntityTransform.groovy:65) at org.grails.compiler.gorm.GlobalJpaEntityTransform.visit(GlobalJpaEntityTransform.groovy:57) ... 29 moreGroovy ticket: https://issues.apache.org/jira/projects/GROOVY/issues/GROOVY-11754
This issue has been resolved by 574b5762a7a5158301209d4dd4360be33d6d528a 🎉
Error: Can't have an abstract method in a non-abstract class
But the method is actually implemented in the parent class.
> Task :grails-core:compileGroovy startup failed: /home/mattias/Projects/grails/grails-core/grails-core/src/main/groovy/grails/boot/config/tools/ProfilingGrailsApplicationPostProcessor.groovy: 35: Can't have an abstract method in a non-abstract class. The class 'grails.boot.config.tools.ProfilingGrailsApplicationPostProcessor' must be declared abstract or the method 'void onApplicationEvent(E)' must be implemented. @ line 35, column 1. class ProfilingGrailsApplicationPostProcessor extends GrailsApplicationPostProcessor implements BeanPostProcessor { ^ 1 errorGroovy ticket: https://issues.apache.org/jira/browse/GROOVY-11753
This issue has been resolved by https://github.com/apache/groovy/pull/2292 🎉