【问题标题】:Tomcat error with deploymentTomcat 部署错误
【发布时间】:2011-12-28 09:16:30
【问题描述】:

我正在尝试将 war 文件部署到 tomcat 6.0.27。这个war文件有spring conf和java beans以及常规的html等。这个war文件成功地部署在一个安装在windows平台上的tomcat上。但是,当尝试部署到 Linux 时,tomcat 日志中显示以下错误:(并且应用程序未部署)

SEVERE: ContainerBase.addChild: start: 
LifecycleException:  Error initializaing :  java.lang.IllegalArgumentException: The archive [jar:file:/var/lib/tomcat6/webapps/afghlcustomer.war!/] is malformed and will be ignored: an entry contains an illegal path [/]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4217)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:525)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1359)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1475)
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:645)
    at org.apache.catalina.manager.ManagerServlet.doPut(ManagerServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:640)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)

我该如何解决这个问题?我从哪里开始?

【问题讨论】:

  • 你是如何构建 WAR 文件的?
  • @Franklin 我正在使用 ant 和 ivy 构建战争文件。你想看剧本吗?
  • 作为一个快速修复,您如何直接部署展开的文件夹而不是 WAR 文件。至少你会知道它在 Linux 上的工作。
  • @Franklin 我们的 linux 管理员正在手动分解 webapps 文件夹中的文件,但随后它开始与另一个 spring 项目发生冲突。它会尝试从另一个 web 应用程序中查找控制器。
  • 男士问题已修复。它在 ANT WAR 目标中。定义如下的前缀:/WEB-INF-classes/... 导致了问题。由于 WEB-INF 位于根目录中,因此无需在开头添加“/”。只是直接叫它WEB-INF/classes

标签: spring tomcat war


【解决方案1】:

您可能已经使用 JVM 找到了 bug,但我很确定分解后的文件夹应该可以工作。

【讨论】:

  • 我刚试过这个。这些项目得到部署,但正如我之前所说,它们开始相互冲突。一个项目试图调用另一个 spring 项目的控制器。
  • 我在 windows 平台上没有任何此类问题。
  • 相信您已经知道这一点,但是每个项目在 webapp 目录中都有自己的文件夹。正确的!!你也在使用 Spring Webservices 吗?当两个 Spring WS 应用程序部署在同一个 Tomcat 上时,我也有一次奇怪的冲突。
  • 现在我已经解决了这个问题。这是我在基本包中扫描控制器的方式。我使用 * 代替实际指定基本包,如 com.xxx。无论如何感谢您的帮助@Franklin。我确实按照你推荐的方式部署了它,直到远程部署脚本开始工作为止。
  • 成功了。让我们知道远程部署何时生效。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 2023-03-29
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多