我的 Eclipse WTP 在 Tomcat 部署过程中有一个奇怪的行为。我正在使用 Eclipse 3.7 (Indigo)、WTP 3.3、没有m2eclipse 插件、Java 1.6、Tomcat 5.5。
我的应用程序是一个 Web 应用程序,它具有一些其他项目作为依赖项,以及一些第三方依赖项。我的项目由 Maven 管理,当我们使用此工具构建应用程序时一切正常。
为了使用 Eclipse 处理我的项目,我运行mvn eclipse:clean eclipse:eclipse
,然后在 IDE 中导入我的项目。
当我想在 Tomcat 5.5 服务器(此服务器由 Eclipse 管理)上部署此 Web 应用程序时,会出现我的问题。当我创建一个新的 Tomcat 服务器并在其中部署我的my-project-portal应用程序时,它只添加了my-project-xxx依赖项,以及少量第三方依赖项(大约有数百个已定义)。在我的一位同事桌面上(他使用的是 Eclipse 3.5),根本没有部署第三方依赖项,只有my-project-xxx JAR ...
但是,当我在Java Build Path > Libraries或“部署程序集”中查看 web-app 项目属性时,依赖项列表是正确且完整的。
笔记
我使用较旧的 Eclipse(3.3,使用 WTP 3.1)进行了一些测试,但没有遇到任何部署问题。但是,这个 WTP 仍然使用“Java EE Modules Dependencies”,而最新的 WTP 版本并非如此。
到目前为止,我们使用了一个自定义的 Maven 插件,mvn eclipse:eclipse
它将所有依赖项(包括传递的)复制到my-webapp-project/WebContent/WEB-INF/lib
. 这样做,Eclipse 自动部署了这些依赖项的内容,因此,我们在 Tomcat 服务器中获得了所有依赖项。
问题
- 我的流程有什么问题?
- 我真的需要复制
WEB-INF/lib
目录中的所有依赖项吗? - 当我们想使用 Eclipse 在 Tomcat 服务器上部署 Web 应用程序时,正常的过程是什么?
这是运行后我的 Eclipse 配置文件的摘录mvn eclipse:eclipse
:
.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/asm/asm/2.2.2/asm-2.2.2.jar" sourcepath="M2_REPO/asm/asm/2.2.2/asm-2.2.2-sources.jar"/>
<classpathentry kind="src" path="/my-project-business"/>
...
<classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
</classpath>
.settings/org.eclipse.wst.common.component
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="my-project-portal">
<property name="context-root" value="my-project-portal"/>
<wb-resource deploy-path="/" source-path="/WebContent"/>
<property name="java-output-path" value="/WebContent/WEB-INF/classes"/>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
...
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/my-project-business/my-project-business">
<dependency-type>uses</dependency-type>
</dependent-module>
<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-module>
</project-modules>