Eclipse WTP在Tomcat服务器中部署依赖项的奇怪行为

时间:2011-04-01 08:39:01

标签: eclipse tomcat maven eclipse-wtp

我的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服务器上部署此Web应用程序(此服务器由Eclipse管理)时,会出现问题。 当我创建一个新的Tomcat服务器,并在其中部署我的 my-project-portal 应用程序时,它只添加 my-project-xxx 依赖项,以及少数第三个-parties依赖(大约有9个定义)。 在我的一位同事桌面上(他正在使用Eclipse 3.5),根本没有部署第三方依赖,只有 my-project-xxx JAR ......

但是,当我查看web-app项目属性时,在 Java Build Path>中库或“部署程序集”中的依赖项列表是正确和完整的。

备注

我使用较旧的Eclipse(3.3,使用WTP 3.1)进行了一些测试,但我没有遇到任何部署问题。 但是,这个WTP仍在使用“Java EE Modules Dependencies”,而不是最新的WTP版本。

到目前为止,我们在mvn eclipse:eclipse之后使用了一个自定义Maven插件,它将所有依赖项(包括传递依赖项)复制到my-webapp-project/WebContent/WEB-INF/lib。 这样做,Eclipse自动部署了这些依赖项的内容,因此,我们获得了Tomcat服务器中的所有依赖项。

问题

  • 我的流程出了什么问题?
  • 我是否真的需要复制WEB-INF/lib目录中的所有依赖项?
  • 当我们想使用Eclipse在Tomcat服务器上部署Web应用程序时,什么是正常过程?

以下是运行mvn eclipse: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>

1 个答案:

答案 0 :(得分:0)

我认为您的配置错误是因为:

  • 如果您的项目由maven管理,您将永远不需要使用此工具所需的依赖项设置“.classpath”,例如,如果您需要一个不同的库或更改其中一个版本,则需要更新您的eclipse项目中的配置等。您的'org.eclipse.wst.common.component'文件的同义词。

我认为您需要为@stivlo安装m2eclipse的WTP支持,当然要安装m2eclipse并检查项目配置,因为您需要删除这些文件中定义的所有依赖项。

现在,我从不复制/ WEB-INF / lib目录中的所有依赖项,因为我不想一直关注这些目录。例如,当我需要启动Tomcat时,m2eclipse插件自动部署内部Eclipse目录中的所有库和差异(即静态文件,类,资源文件等),就是这样,服务器从上下文开始,包含所有需要的文件。为方便起见,我总是使用Eclipse中相关的插件。