我遇到了Eclipse Run on Server
功能的奇怪行为。我的环境:
Eclipse Kepler SR 1, WTP
Apache Tomcat 7.0.37
我在Eclipse中有两个动态Web项目 - ProjectA
和ProjectB
。两者都在index.xhtml
文件夹的正下方有一个WebContent
文件(实际上两个项目都是JSF项目)。当我将它们作为WAR
文件导出到Tomcat安装的Tomcat webapps
文件夹时,两者都运行正常。当我通过ProjectA
功能在Eclipse管理的Tomcat服务器上运行Run on Server
时,一切都很好。但是当我想通过ProjectB
从Eclipse启动Run on Server
时,在访问JSF servlet时遇到404 error
或http://localhost:8080/ProjectB/index.xhtml
错误时会得到index.xhtml Not Found in ExternalContext as a Resource
资源通过正确的http://localhost:8080/ProjectB/faces/index.xhtml
网址。 (所有以/faces/
开头的网址都与JSF Servlet
匹配。
查看Eclipse Workspace(<eclipse-workspace>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
)中Tomcat文件夹中已部署的应用程序,可以看出原因:
对于ProjectB
,Eclipse项目WebContent
文件夹的内容已部署到WEB-INF
文件夹,而不是部署到项目部署的根文件夹。应用程序服务器当然找不到资源。
问题是 - 为什么部署失败,我该如何避免?
我甚至检查了eclipse中两个项目的Deployment Assembly
属性。两者都具有相同(默认)源到目标文件夹映射。以下是.settings\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="ProfileAndGroupManagementGUI">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="context-root" value="ProfileAndGroupManagementGUI"/>
<property name="java-output-path" value="/ProfileAndGroupManagementGUI/build/classes"/>
</wb-module>
奇怪,不是吗?有人有什么想法?
答案 0 :(得分:1)
该行
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
告诉wst
将您的来源打包到/WEB-INF/classes
,这是您不想做的事情,因为这是一个lib项目。将其更改为
<wb-resource deploy-path="/" source-path="/src"/>
会做到这一点。