Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running war on tomcat7 vs grails run-app

I am having a problem running grails generated war file on tomcat7. If/when I run the same app with grails run-app all is good and in the proper working order. The exception I get while running tomcat7 and deployed war:

2014-08-20 09:17:28,933 [http-bio-127.0.0.1-8080-exec-7] ERROR errors.GrailsExceptionResolver  - ClassNotFoundException occurred when processing request: [GET] /
jline.console.history.History. Stacktrace follows:
java.lang.ClassNotFoundException: jline.console.history.History
    at org.codehaus.plugin.swagger.builder.SwaggerDocsBuilder.buildApiDeclarations(SwaggerDocsBuilder.groovy:71)
    at org.codehaus.plugin.swagger.builder.SwaggerDocsBuilder.rebuild(SwaggerDocsBuilder.groovy:48)
    at org.codehaus.plugin.swagger.builder.SwaggerDocsBuilder.build(SwaggerDocsBuilder.groovy:36)
    at org.codehaus.grails.plugins.swaggerapidocs.SwaggerApiDocsController.resources(SwaggerApiDocsController.groovy:21)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

Line 71 of SwaggerDocsBuilder.groovy

rules = new BuildPathMap().build(grailsApp)

and BuildPathMap extends

import org.codehaus.groovy.grails.web.mapping.reporting.AnsiConsoleUrlMappingsRenderer
class BuildPathMap extends AnsiConsoleUrlMappingsRenderer {

my guess is AnsiConsoleUrlMappingsRenderer somehow depends on jline.console.history.History but then why is it missing from the war file? Is there something that can be done during the war generation to ensure that ll dependencies are properly packaged?

like image 957
ash Avatar asked Aug 20 '14 13:08

ash


1 Answers

Its a bug in grails.

https://jira.grails.org/browse/GRAILS-8532

could fix this with a workaround adding the following snippet to BuildConfig.groovy:

grails.war.resources = { stagingDir, args ->
    copy(todir: "${stagingDir}/WEB-INF/lib", flatten: "true") {
        fileset(dir: "${grailsHome}/lib", includes: "**/jline-*.jar, **/jansi-*.jar")
    }
}
like image 120
Milind J Avatar answered Oct 29 '22 18:10

Milind J