Eclipse将WebContent文件夹的内容部署到WEB-INF文件夹。

时间:2014-01-09 14:15:17

标签: eclipse tomcat web-inf

我遇到了Eclipse Run on Server功能的奇怪行为。我的环境:

  • Eclipse Kepler SR 1, WTP
  • Apache Tomcat 7.0.37

我在Eclipse中有两个动态Web项目 - ProjectAProjectB。两者都在index.xhtml文件夹的正下方有一个WebContent文件(实际上两个项目都是JSF项目)。当我将它们作为WAR文件导出到Tomcat安装的Tomcat webapps文件夹时,两者都运行正常。当我通过ProjectA功能在Eclipse管理的Tomcat服务器上运行Run on Server时,一切都很好。但是当我想通过ProjectB从Eclipse启动Run on Server时,在访问JSF servlet时遇到404 errorhttp://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>

奇怪,不是吗?有人有什么想法?

1 个答案:

答案 0 :(得分:1)

该行

<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>

告诉wst将您的来源打包到/WEB-INF/classes,这是您不想做的事情,因为这是一个lib项目。将其更改为

<wb-resource deploy-path="/" source-path="/src"/>

会做到这一点。