【问题标题】:Grails Standalone app with Java Webstart fails with ClassNotFoundException: FilterDef带有 Java Webstart 的 Grails 独立应用程序失败并出现 ClassNotFoundException:FilterDef
【发布时间】:2014-12-15 22:19:18
【问题描述】:

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

信息:未找到全局 web.xml 2014 年 12 月 15 日下午 2:13:42 org.apache.tomcat.util.digester.Digester startElement 严重:开始事件引发异常 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) 在 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) 在 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 严重:应用程序 web.xml 文件中的解析错误 jndi:/localhost/hl/WEB-INF/web.xml org.xml.sax.SAXParseException; systemId: jndi:/localhost/hl/WEB-INF/web.xml;行号:15; 列号:10; (15, 10) 处的错误: org.apache.catalina.deploy.FilterDef 在 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) 在 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 org.apache.catalina.startup.TaglibUriRule 正文信息: TLD 已跳过。 URI:http://www.springframework.org/tags 已经是 定义于 2014 年 12 月 15 日下午 2:13:43 org.apache.catalina.core.StandardContext startInternal 严重:错误 2014 年 12 月 15 日下午 2:13:43 org.apache.catalina.core.StandardContext startInternal SEVERE:上下文 [/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 在 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) 在 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 开始信息: 启动 ProtocolHandler ["http-bio-8080"] 服务器正在运行。浏览至 http://myurl.com:8080/hl

我的猜测是,Webstart 启动器处理 Tomcat 的方式与提取的战争路径与包含 Tomcat 二进制文件的 jar 文件相关,但我很难解决这个问题。

【问题讨论】:

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


    【解决方案1】:

    好吧,我对我的部署解决方案太着急了,我忘记了一个关键事实: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 版本与我使用的完全相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多