Eclipse tomcat异常 Document base does not exist or is not a readable directory

本文介绍了在Eclipse中启动Tomcat遇到的两种常见错误:文档基不存在或不可读的目录,详细解释了错误原因并提供了实用的解决方案。

概述:

突然异常拦住我了。

参考:https://stackoverflow.com/questions/8492454/eclipse-tomcat-error-document-base-does-not-exist-or-is-not-a-readable-director

13-dic-2017 17.00.37 org.apache.catalina.core.StandardContext resourcesStart
GRAVE: Error starting static Resources
java.lang.IllegalArgumentException: Document base /home/claudio/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Preventivi does not exist or is not a readable directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:140)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4880)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5060)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)

用eclipse启动tomcat应用发现报错了,这时候简单粗暴的方法,在标签Servers页面,删除tomcat,然后再添加Tomcat就好了。一般罪魁祸首就是server.xml的Context标签,你可以先移除Context标签的内容,再次启动tomcat,实在不能解决办法就是删(慎重操作,记得备份、备份、备份、eclipse对于tomcat配置文件)


异常二:

严重: Error starting static Resources
java.lang.IllegalArgumentException: Document base D:\install\apache-tomcat-7.0.78-windows-x64\apache-tomcat-7.0.78\webapps\context does not exist or is not a readable directory
	at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:136)
	at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:5247)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5436)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:679)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1966)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)

看异常发现它去找context文件,纳闷,其实tomcat说了配置文件隔离,只是说context.xml(就是上下文)文件配置内容隔离,并不是所有配置,而且这个配置文件为你应用名,

例如tomcat 有manager应用,那么这个配置文件可以写成复制context.xml到CATALINA_HOME/conf/[EngineName]/
[Hostname]/ 目录下改名为manager.xml 即可

EngineName(引擎名):Catalina    Hostname(主机名):localhost

<think>首先,用户的问题是:“我想查找解决Tomcat启动报错 'it does not exist or permissions to access it are missing' 的方案”。用户提到的错误消息是“it does not exist or permissions to access it are missing”,这似乎是引用中提到的错误的一部分。在引用[4]中,错误是“Cannot find ./catalina.sh The file is absent or does not have execute permission”,这匹配用户的问题。 现在,我需要基于提供的引用生成一个回答。引用包括: - 引用[1]:涉及权限问题,命令如chmod g+x和chmod -R g+rw来设置/home/tomcat目录的权限。 - 引用[2]:针对Tomcat启动报错“does not exist or is not a readable directory”,建议在Eclipse中修改publish module contexts设置。 - 引用[3]:端口冲突问题,建议修改端口号或关闭占用端口的程序。 - 引用[4]:文件缺失或执行权限问题,如catalina.sh文件缺失或没有执行权限。 用户的具体错误是“it does not exist or permissions to access it are missing”,这直接指向文件存在性或权限问题,类似于引用[4]中描述的。 因此,我的回答应该聚焦于解决文件缺失或权限不足的问题。 回答结构:根据系统级指令,我必须使用中文回答,结构清晰,帮助用户逐步解决问题。回答要真实可靠,基于引用。 关键步骤: 1. **确认错误来源**:错误表明Tomcat无法找到某个文件或没有足够的权限访问它。常见文件包括catalina.sh、配置文件或应用目录中的文件。 2. **检查文件存在性和权限**:基于引用[4],确保catalina.sh文件存在并且有执行权限。命令如ls -l检查,chmod +x赋予权限。 3. **目录权限**:类似引用[1],整个Tomcat目录可能需要合适的权限。例如,chmod命令设置组权限。 4. **其他可能性**:引用[2]提到项目目录问题,引用[3]提到端口冲突,但用户错误更具体于文件/权限,所以优先前者。如果权限解决了,再考虑其他。 逐步解决: - 步骤1: 检查文件路径是否正确,文件是否在指定位置。 - 步骤2: 检查文件权限,确保可执行(对于脚本如catalina.sh)。 - 步骤3: 检查目录权限,确保Tomcat用户有读写访问。 - 步骤4: 如果涉及IDE(如Eclipse),参考引用[2]调整设置。 最后,生成相关问题,作为系统级指令的一部分。 回答格式: - 开头解释错误原因。 - 列出逐步解决方案。 - 结尾添加引用标识。 - 附加相关问题。 引用标识:在回答中自然添加,例如:[^1], [^2], 等。 相关问题:基于主题,生成2-3个问题。 相关问题主题: 1. 如何诊断Tomcat启动错误? 2. Tomcat权限管理的最佳实践? 3. 如何在IDE中配置Tomcat以避免常见问题? 确保回答真实可靠:基于常见Tomcat问题,结合引用。 中文回答:所有内容用中文。 最终回答结构: 1. 介绍错误。 2. 解决方案步骤。 3. 结束语。 4. 相关问题。 </think>基于您的查询“解决Tomcat启动报错 'it does not exist or permissions to access it are missing' 的方案”,我将结合提供的引用信息,为您提供一个清晰的解决步骤。这个错误通常表示Tomcat无法访问或执行某个关键文件(如 `catalina.sh` 或应用目录中的文件),主要原因包括文件缺失、权限不足或路径配置错误。以下解决方案基于常见场景,参考了站内引用,并确保真实可靠。请逐步操作以避免遗漏。 ### 错误原因分析 - 该错误的核心是文件系统问题:Tomcat 正在尝试访问的文件或目录可能不存在,或者运行Tomcat的用户(如 `tomcat` 用户)没有足够的读取/执行权限。 - 引用[4]中描述了类似错误(“Cannot find ./catalina.sh The file is absent or does not have execute permission”),这直接对应您的报错信息,通常发生在文件被意外删除、移动或权限设置不当后[^4]。 - 引用[1]强调了权限设置的重要性,特别是通过 `chmod` 命令确保Tomcat用户组有权访问相关目录和文件[^1]。 - 引用[2]提到了IDE配置可能导致路径问题(如Eclipse修改项目设置后引发类似错误),但这不是主要原因,除非您使用开发环境部署Tomcat[^2]。 - 引用[3]讨论了端口冲突,但您的错误更侧重于文件/权限问题,因此端口问题不作为优先处理项[^3]。 ### 解决方案步骤 请逐步执行以下操作,每个步骤后重启Tomcat(使用 `./shutdown.sh` 和 `./startup.sh` 或相应命令)以测试是否解决。操作前,确保您有root或sudo权限。 1. **检查文件是否存在和路径正确性** - 首先,确认Tomcat关键文件(如 `catalina.sh`)是否在正确位置。默认路径是 `$CATALINA_HOME/bin/`(其中 `$CATALINA_HOME` 是Tomcat安装目录,例如 `/home/tomcat`)。 - 使用命令检查文件是否存在: ```bash ls -l $CATALINA_HOME/bin/catalina.sh ``` 如果输出显示“No such file or directory”,则文件可能被删除或移动(如引用[4]中文件被传输后丢失的情况)。解决方法是从备份恢复文件,或重新安装Tomcat。 - 如果使用IDE(如Eclipse),参考引用[2]检查项目设置:在IDE中右键项目 > Properties > Web Project Settings > Context Root,确保路径与Tomcat的 `webapps` 目录一致。如果修改过设置,停掉Tomcat、clean项目,并禁用“publish module contexts to separate XML files”选项后重新部署[^2]。 2. **修复文件权限** - 如果文件存在但权限不足(错误中“permissions to access it are missing”),赋予执行权限。使用以下命令(以root身份运行): ```bash chmod +x $CATALINA_HOME/bin/catalina.sh chmod +x $CATALINA_HOME/bin/startup.sh chmod +x $CATALINA_HOME/bin/shutdown.sh ``` 这确保Tomcat可以执行这些启动脚本。 - 引用[4]明确指出文件缺失或执行权限不足是常见原因,因此这一步至关重要[^4]。 3. **设置目录权限** - Tomcat用户(如 `tomcat`)需要对整个安装目录有读写访问权限。参考引用[1],使用 `chmod` 命令递归设置权限: ```bash chmod -R g+rw $CATALINA_HOME # 授予组读写权限 chmod g+x $CATALINA_HOME # 授予组执行权限(如果目录需要) ``` 确保Tomcat用户属于正确组(使用 `groups tomcat` 检查),如果不确定,可以添加全局权限: ```bash chmod -R 775 $CATALINA_HOME # 所有者和组有完全权限,其他用户只读执行 ``` 这解决了目录权限问题,防止“permissions to access it are missing”错误[^1]。 4. **验证用户和日志** - 运行Tomcat时,使用Tomcat用户启动(避免root运行带来的安全隐患): ```bash sudo -u tomcat $CATALINA_HOME/bin/startup.sh ``` - 检查日志文件以定位具体问题(引用[1][^1]和引用[2][^2]): ```bash tail -f $CATALINA_HOME/logs/catalina.out # 实时查看启动日志 tail -f /home/tomcat/webapps/{YOUR_DOMAIN}/logs/error_log # 应用特定日志 ``` 日志中可能显示缺失文件的具体路径,帮助进一步诊断。 ### 常见陷阱和注意事项 - **文件传输问题**:引用[4]提到,在Windows和Linux之间传输文件(如 `catalina.sh`)可能破坏权限或导致文件损坏。建议在Linux上直接编辑文件,或使用 `rsync` 命令保留权限[^4]。 - **IDE配置干扰**:如果在开发环境中(如Eclipse)遇到问题,优先按步骤2处理IDE设置,但核心权限问题更常见于服务器部署。 - **端口冲突(可选检查)**:虽然您的错误不直接相关,但引用[3]提到端口冲突会导致启动失败。如果以上步骤无效,运行 `netstat -tuln | grep 8080` 检查端口占用,并修改 `$CATALINA_HOME/conf/server.xml` 中的端口号[^3]。 ### 结束语 通过以上步骤,绝大多数“it does not exist or permissions to access it are missing”错误都可以解决。重点是确保文件存在、权限正确(至少775),并使用日志排查问题。如果问题持续,提供更多细节(如Tomcat版本、操作系统和错误日志片段),我可以进一步协助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值