2013年3月12:
用Eclipse A打开Eclipse B的workspace,然后在tomcat下启动某一个web工程时报错:
Document base E:\Workspaces\JavaEE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\cy-manage does not exist or is not a readable directory
其中E:\Workspaces\JavaEE是我的Eclipse工作空间目录。对于这个问题一直纳闷不得其解,在网上找到了一篇相关的文章:http://blog.csdn.net/asdf544265772/article/details/7928121 文中给出原因是 tmp0\conf\server.xml 中<Context>节点配置了很多已经移除的项目;需要执行下面两步操作:
1.删除无用的 tmp0\conf\server.xml 中的 <Context> 节点;
2.删除 tmp0\work\Catalina\localhost 下的所有文件夹;
但是我按照他的方法去对应的目录下查找, tmp0\conf\server.xml里<Context>节点中并没有出现其余的项目。 tmp0\work\Catalina\localhost 下也没有多余文件夹。不得已,我尝试了最后的一种方法,就是把Eclipse中把Tomcat删除然后再重新配置。再次部署工程启动后发现竟然不再报错了。
记录一下,便于再次遇到这种问题时可以参考。
2013年11月20:
今天又碰到了这个问题,是另外一个工程,该工程是我同事用IntelliJ IDEA建立的工程,我导入到我自己的Eclipse,配置了Project Facets之后,部署到tomcat下启动报错。
排查过程:
1.查看workspace工程目录下.settings文件夹下是否所有文件都存在,文件名称为:
.jsdtscope org.eclipse.core.resources.prefs org.eclipse.jdt.core.prefs org.eclipse.m2e.core.prefs org.eclipse.wst.common.component org.eclipse.wst.common.project.facet.core.xml org.eclipse.wst.jsdt.ui.superType.container org.eclipse.wst.jsdt.ui.superType.name
如果有文件不存在,则可以从其它正常的maven web工程里拷贝一份过来。
2.检查org.eclipse.wst.common.project.facet.core.xml里的内容
<?xml version="1.0" encoding="UTF-8"?> <faceted-project> <fixed facet="wst.jsdt.web"/> <installed facet="java" version="1.6"/> <installed facet="jst.web" version="2.5"/> <installed facet="wst.jsdt.web" version="1.0"/> </faceted-project>
上面就是我们配置的Project Facet信息,版本号是跟你选择的Dynamic Web Module和java版本相关。
部署后还是报错,定位到了org.eclipse.wst.common.component这个文件
我看了一下我的工程该文件的内容:
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="test-web"> <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> <property name="context-root" value="hanting"/> <property name="java-output-path" value="/hanting/target/classes"/> </wb-module> </project-modules>
原来问题出在wb-module配置上面,source-path是默认的WebContent,但是一般的maven web工程的web资源目录是src/main/webapp,所以启动会报错,正确的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="test-web"> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <property name="java-output-path" value="/ht-manage/target/classes"/> <property name="context-root" value="test-web"/> </wb-module> </project-modules>
修改后启动工程就正常了。
附:如果启动后报java.lang.ClassNotFoundException: ContextLoaderListener错误的话可以查看我的另外一篇博客:http://chenzhou123520.iteye.com/blog/1836987