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

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

但是,当我在 Java Build Path > Libraries 或“Deployment Assembly”中查看 Web 应用程序项目属性时,依赖项列表是正确且完整的。

注意事项

我用较旧的 Eclipse(3.3,WTP 3.1)做了一些测试,我没有遇到任何部署问题。 但是,此 WTP 仍在使用“Java EE 模块依赖项”,最新的 WTP 版本并非如此。

到目前为止,我们在 mvn eclipse:eclipse 之后使用自定义 Maven 插件,将所有依赖项(包括传递依赖项)复制到 my-webapp-project/WebContent/WEB-INF/库。 这样,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>

最佳答案

我认为您遇到了配置错误的问题,因为:

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

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

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

关于eclipse - Eclipse WTP 在 Tomcat 服务器中部署依赖项的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510937/

相关文章:

android - 如何在 Android 布局编辑器中打开布局 xml 文件?

java - 如何显示飞机座位表?

java jsp if语句

javascript - AJAX 调用不同的应用程序上下文 (Java + Tomcat)

web-services - hibernate + Tomcat 组织/hibernate/异常/SQLGrammarException java.lang.reflect.InvocationTargetException

eclipse - 从 Perforce 导入项目并将其转换为 Maven 项目后,自动完成和 ctrl+click 需要什么才能在 Eclipse 中工作?

java - 从 IntelliJ IDEA 在 Maven 项目中添加 persistence.xml 文件

java - Accessor 方法未从 mutator 方法接收汽车

tomcat - Grails 3 Spring Security LDAP 插件和 Tomcat 8

java - 如何以编程方式对 Java 源代码执行 Eclipse->Refactor->Rename 功能?