使用Maven有段时间了,自己DIY项目后遇到了一个问题,项目不能使用WTP提供的Run On Server功能……
1、问题描述
配置好项目,配置好Tomcat6,加入项目到Tomcat中然后运行Tomcat没有加载项目的日志信息
2、环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="exercise-admin"> <property name="context-root" value="exercise-admin"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/js"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/common"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/WEB-INF/content"/> <wb-resource deploy-path="/" source-path="/src/main/webapp"/> <property name="java-output-path" value="/target/classes"/> </wb-module> </project-modules> |
说明一下wtp的默认规则,org.eclipse.wst.common.component规定deploy-path为斜杠(/)并且是包含WEB-INF的wb-resource要在第一位,所以我在这里犯错了,看上面的配置就清楚了
3、问题原因
我一向喜欢“工欲善其事必先利其器”;因为基于Maven的WTP工程默认只有一个
<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
看截图
所以默认的.settings/org.eclipse.wst.common.component的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="exercise-admin"> <property name="context-root" value="exercise-admin"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/" source-path="/src/main/webapp"/> <property name="java-output-path" value="/target/classes"/> </wb-module> </project-modules> |
现在比较一下就比较清楚了,原因是我DIY的配置多了3行,所以我DIY的配置如下:

还有另外一个原因就是因为我的通过m2eclipse插件提供的SCM功能checkout项目,原本DIY配置好的项目被eclipse改动了,从svn信息看得出来,所以导致了问题的发生
4、问题关键所在
保证项目的.settings/org.eclipse.wst.common.component文件中的
<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
在以deploy-path=”/”的wb-resource排在第一位,因为tomcat启动时要读取WEB-INF/web.xml,如果不在第一位找不到当然服务不能启动
5、问题解决
- 根据上面说的保证webapp的位置即可,最终配置如下,可以保留DIY结果又可以启动服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="exercise-admin"> <property name="context-root" value="exercise-admin"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/" source-path="/src/main/webapp"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/js"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/common"/> <wb-resource deploy-path="/" source-path="/src/main/webapp/WEB-INF/content"/> <property name="java-output-path" value="/target/classes"/> </wb-module> </project-modules>
- 或者不要使用m2eclipse提供的SCM检出功能,直接用乌龟checkout,这样就不会因为eclipse自动设置修改.settings/org.eclipse.wst.common.component配置了
Popularity: 6%
