使用Java Webstart的Grails Standalone应用程序因ClassNotFoundException而失败:FilterDef

时间:2014-12-15 22:19:19

标签: java tomcat grails plugins java-web-start

我已将Grails Standalone插件添加到我的应用程序中,以创建我希望使用Java Webstart启动的轻量级独立版本的应用程序。单独使用插件并从命令行运行应用程序似乎工作,但如果我尝试使用webstart,我会收到以下错误:

  

信息:找不到全局web.xml   2014年12月15日下午2:13:42 org.apache.tomcat.util.digester.Digester startElement   严重:Begin事件抛出异常java.lang.ClassNotFoundException:   org.apache.catalina.deploy.FilterDef at   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)     在   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)     在   org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:144)     在   org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)     在   com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)     在   com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)     在   com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)     在   com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java:648)     在org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)     在   org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1899)     在   org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1252)     在   org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)     在   org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)     在   org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)     在   org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)     在   org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)     在java.util.concurrent.FutureTask.run(FutureTask.java:262)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:745)

     

2014年12月15日下午2:13:42 org.apache.catalina.startup.ContextConfig   parseWebXml SEVERE:解压缩应用程序web.xml文件中的错误   jndi:/localhost/hl/WEB-INF/web.xml org.xml.sax.SAXParseException;   systemId:jndi:/localhost/hl/WEB-INF/web.xml; lineNumber:15;   columnNumber:10;错误在(15,10):   org.apache.catalina.deploy.FilterDef at   org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2687)     在   org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2719)     在   org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1279)     在   com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)     在   com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)     在   com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)     在   com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java:648)     在org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)     在   org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1899)     在   org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1252)     在   org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)     在   org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)     在   org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)     在   org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)     在   org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)     在java.util.concurrent.FutureTask.run(FutureTask.java:262)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:745)引起:   java.lang.ClassNotFoundException:org.apache.catalina.deploy.FilterDef     在   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)     在   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)     在   org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:144)     在   org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)     ......还有25个

     

2014年12月15日下午2:13:42 org.apache.catalina.startup.ContextConfig   parseWebXml严重:发生在第15行第10栏2014年12月15日2:13:42   PM org.apache.catalina.startup.ContextConfig configureStart SEVERE:   由于之前的错误12月15日标记此应用程序不可用,   2014 2:13:43 PM org.apache.catalina.startup.TaglibUriRule body INFO:   TLD跳过了。 URI:http://www.springframework.org/tags已经存在   定义2014年12月15日下午2:13:43   org.apache.catalina.core.StandardContext startInternal SEVERE:错误   getConfigured 2014年12月15日下午2:13:43   org.apache.catalina.core.StandardContext startInternal SEVERE:Context   [/ hl]由于之前的错误导致启动失败严重:上下文[/ hl]   在[org.apache.catalina.core.StandardContext]生命周期中失败。   允许Tomcat关闭。 2014年12月15日下午2:13:43   org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc   警告:Web应用程序的JDBC驱动程序取消注册失败[/ hl]   java.lang.NullPointerException at   org.apache.catalina.loader.WebappClassLoader.clearReferencesJdbc(WebappClassLoader.java:2042)     在   org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1978)     在   org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1890)     在   org.apache.catalina.loader.WebappLoader.stopInternal(WebappLoader.java:662)     在   org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)     在   org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5669)     在   org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)     在java.util.concurrent.FutureTask.run(FutureTask.java:262)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:745)

     

2014年12月15日下午2:13:43 org.apache.coyote.AbstractProtocol start INFO:   启动ProtocolHandler [" http-bio-8080"]服务器正在运行。浏览到   http://myurl.com:8080/hl

我的猜测是,Webstart启动程序处理Tomcat的方式与提取的战争相对于包含Tomcat二进制文件的jar文件的路径不同,但我很难解决这个问题。 / p>

1 个答案:

答案 0 :(得分:0)

好吧,我对我的部署解决方案非常热衷于忘记一个关键事实:Grails需要JDK,Java Webstart提供JRE,而不是JDK JVM。我认为,无论我做什么,使用Java Webstart都行不通。

经验教训 - 从配置文件和版本冲突的细节中退一步,当你有一些你似乎无法通过的东西时,看看你的整体设计。

我不应该发现导致此问题的2个问题,1是webapps / META-INF /中存在context.xml文件,当删除时会导致此问题消失: http://grails.1312388.n4.nabble.com/Upgrade-to-tomcat-7-0-47-fails-with-web-xml-issue-td4652196.html

另一个是BuildConfig.groovy中缺少grails.project.fork配置

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

这两个问题都发现在与我使用的版本接近的版本中,使用了我使用的完全相同的Tomcat版本。