【问题标题】:java.lang.IllegalArgumentException: Document base tomcat\webapps\appdata does not exist or is not a readable directoryjava.lang.IllegalArgumentException:文档库 tomcat\webapps\appdata 不存在或不是可读目录
【发布时间】:2012-06-11 17:10:11
【问题描述】:

我之前在本地 Tomcat (6.0.35) 实例上部署了一个名为 appdata.war 的 WAR,因此 webapps 目录如下所示:

webapps/
    docs/
    examples/
    host-manager/
    manager/
    appdata/ (exploded WAR)
    ROOT/
    appdata.war

我删除了appdata/appdata.war(这样Tomcat 就不会尝试重新部署它),然后在这个目录中添加了一个新的war (appmon-qa.war)。然后我运行了 Tomcat 启动脚本,看到了引用“旧”appdata WAR 的部署错误。我四处逛逛,看到一个名为 ${TOMCAT.HOME}/work/Catalina/localhost/appdata 的文件夹,然后我删除了它(再次,只是为了防止 Tomcat 重新部署它)。然后我重新运行了启动脚本,并在 catalina 日志中看到了这一点:

SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base C:\Program Files\Apache\apache-tomcat-6.0.35\webapps\appdata does not exist or is not a readable directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:        
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4320)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4489)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    ...rest of stacktrace omitted for brevity
Jun 7, 2012 11:35:27 AM org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart()
Jun 7, 2012 11:35:27 AM org.apache.catalina.core.StandardContext start
SEVERE: Error getConfigured
Jun 7, 2012 11:35:27 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/appdata] startup failed due to previous errors
Jun 7, 2012 11:35:27 AM org.apache.catalina.core.StandardContext stop
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/appdata] has not been started
Jun 7, 2012 11:35:27 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive appmon-qa.war
Jun 7, 2012 11:35:28 AM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Jun 7, 2012 11:35:28 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/appmon-qa] startup failed due to previous errors

假设我写得非常完美的appmon-qa.war 应用程序由于对这个旧的appdata.war 应用程序的一些幽灵引用而无法部署。如果是这样,我是否(正确地)从 Tomcat 中完全取消部署或删除它,以便它不会给我的新应用程序带来问题?

否则,如果这个日志输出表明appmon-qa.war 本身有问题,那么我从哪里开始调试呢?通常这些“由于先前的错误而失败”输出还包括错误的原因或来源;这个输出非常不具描述性和模糊性。提前致谢!

【问题讨论】:

    标签: java tomcat war


    【解决方案1】:

    查看${TOMCAT.HOME}/conf/Catalina/localhost/appdata.xml,如果存在则删除。

    【讨论】:

    • 感谢@adarshr,但localhost 目录中没有 XML 文件。我确实看到了localhost/appdata/,但它是一个空目录。当我删除它并重新运行启动脚本时,同样的事情发生了,但是localhost/appdata/ 目录被重新创建了! (显然有一些东西在内部引用了appdata!)Tomcat 是否使用嵌入式数据库?!?
    • 您可能在webapps 或类似的其他热部署目录中存在appdata.war 文件。如果您将.war 文件保留在那里,它会自动分解和部署。
    • 正如我原来的帖子所解释的那样,我从 webapps 中删除了 WAR 和分解的目录 - 是否存在隐藏/深度嵌套的目录,Tomcat 6.0.35 将 WAR 复制到或从中引用它们?
    • 没有。您也可以完全清除tempwork 目录,然后重试。
    【解决方案2】:

    我遇到了同样的错误(文档库 ... 不存在或不是可读目录)。简单的解决方案是在现有的 Tomcat 上重新安装(忽略警告“无法安装服务”,因为它已经存在)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2014-01-19
      • 2020-04-16
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多