1
votes

I have a empty grails 4.0.2 project -> grails create-app testbot

This runs fine with -> grails run-app

This also runs fine if I deploy it to tomcat on a windows server using tomcat 9.0.33.

However when i deploy it to tomcat 9.0.16 or 9.0.24 on ubuntu it doesn't start. catalina.log shows the below, i've tried uncommenting compile "org.springframework.boot:spring-boot-starter-tomcat" and changing it to provided "org.springframework.boot:spring-boot-starter-tomcat" but same issue, any ideas?:

29-Mar-2020 21:57:39.308 SEVERE [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/var/lib/tomcat9/webapps/testbot-0.1.war] java.lang.IllegalStateException: Error starting child at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1849) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1620) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:305) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1151) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1353) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1335) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testbot-0.1]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717) ... 24 more Caused by: java.lang.NoSuchMethodError: 'java.lang.String org.codehaus.groovy.runtime.DefaultGroovyMethods.join(java.lang.Iterable, java.lang.String)' at org.grails.config.NavigableMap.(NavigableMap.groovy:38) at org.grails.config.NavigableMap.mergeMapEntry(NavigableMap.groovy:238) at org.grails.config.NavigableMap.mergeMapEntry(NavigableMap.groovy) at org.grails.config.NavigableMap.mergeMaps(NavigableMap.groovy:149) at org.grails.config.NavigableMap.merge(NavigableMap.groovy:125) at org.grails.config.NavigableMap.merge(NavigableMap.groovy) at grails.util.Metadata.loadYml(Metadata.groovy:177) at grails.util.Metadata.access$0(Metadata.groovy) at grails.util.Metadata$_loadFromDefault_closure2.doCall(Metadata.groovy:129) at grails.util.Metadata$_loadFromDefault_closure2.call(Metadata.groovy) at org.codehaus.groovy.runtime.IOGroovyMethods.withStream(IOGroovyMethods.java:1160) at org.codehaus.groovy.runtime.ResourceGroovyMethods.withInputStream(ResourceGroovyMethods.java:1570) at grails.util.Metadata.loadFromDefault(Metadata.groovy:128) at grails.util.Metadata.(Metadata.groovy:58) at grails.util.Metadata.getCurrent(Metadata.groovy:114) at grails.util.Environment.resolveCurrentEnvironment(Environment.java:295) at grails.util.Environment.cacheCurrentEnvironment(Environment.java:321) at grails.util.Environment.getCurrent(Environment.java:288) at grails.util.Environment.(Environment.java:132) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:65) at org.codehaus.groovy.runtime.callsite.CallSiteArray$1.run(CallSiteArray.java:62) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:62) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) at Script1.run(Script1.groovy:26) at Script1$run.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:77) at ch.qos.logback.classic.gaffer.GafferConfigurator$run.callCurrent(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) at ch.qos.logback.classic.gaffer.GafferConfigurator.run(GafferConfigurator.groovy:44) at ch.qos.logback.classic.gaffer.GafferUtil.runGafferConfiguratorOn(GafferUtil.java:43) at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:67) at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150) at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417) at ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addStatus(StatusViaSLF4JLoggerFactory.java:32) at ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addInfo(StatusViaSLF4JLoggerFactory.java:20) at ch.qos.logback.classic.servlet.LogbackServletContainerInitializer.onStartup(LogbackServletContainerInitializer.java:32) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ... 25 more 29-Mar-2020 21:57:39.309 INFO [Catalina-utility-2]

1
Shot in the dark: is the tomcat installed systemwide? is also groovy installed? is your tomcat picking up some age old groovy version that comes with the distri and prefers it over your packaged one in the war?cfrick
Also, which java installation are you using?Daniel
Tomcat 9.0.24 and openjdk 11.0.6Josua Theron

1 Answers

2
votes

The Grails Cache plugin which is installed by default is incompatible with the newer Groovy version used in Grails 4.0.2 and newer.

Either remove the dependency or exclude the groovy-all dependency.

compile "org.grails.plugins:cache", {
    exclude group: "org.codehaus.groovy", module: "groovy-all"
}

Note: I have no idea how functional the cache plugin is if you just exclude the dependency.