ash*_*ash 5 grails war run-app
我在tomcat7上运行grails生成war文件时遇到问题.如果/当我使用grails run-app运行相同的应用程序时,一切都很好并且处于正常的工作状态.运行tomcat7和部署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)
Run Code Online (Sandbox Code Playgroud)
第71行 SwaggerDocsBuilder.groovy
rules = new BuildPathMap().build(grailsApp)
Run Code Online (Sandbox Code Playgroud)
并BuildPathMap扩展
import org.codehaus.groovy.grails.web.mapping.reporting.AnsiConsoleUrlMappingsRenderer
class BuildPathMap extends AnsiConsoleUrlMappingsRenderer {
Run Code Online (Sandbox Code Playgroud)
我的猜测在AnsiConsoleUrlMappingsRenderer某种程度上取决于jline.console.history.History但是为什么它会从war文件中丢失?在战争生成期间是否可以做一些事情来确保ll依赖关系被正确打包?
您的 Tomcat 是否配置为运行未打包或打包的战争。开发作为未打包的 war 运行,因此像 servlet.getRealPath() 这样的命令在打包的 war 上运行时会返回有效值,Tomcat servlet 容器会返回 null。在 server.xml 中搜索 unpackWARs 属性。
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false">
Run Code Online (Sandbox Code Playgroud)
另外,在开发中运行时会为您添加一些依赖项,您需要在 BuildConfig.groovy 中指定它们,否则它们可能在战争中不可用。