12

我有一个以这种方式构建的 Web 应用程序:

A.jar -> B.war -> C.war

我正在使用 Eclipse Juno 并且WTP 版本是 1.1。A.jar 是 B.war 包含的工作空间实用程序项目。B.war 是 C.war 作为覆盖包含的战争项目。这就是我这样做的方式:

<dependency>
    <groupId>com.projects</groupId>
    <artifactId>B</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>war</type>
    <scope>runtime</scope>
</dependency>

之后,我将 C 项目部署到 Tomcat 服务器。如果我手动将 Maven 生成的战争部署到 Tomcat,这就像一个魅力,因为 A.jar 包含在WEB-INF/lib中。但是,当我让m2e-wtp进行部署时,我的问题就来了,因为它正确地进行了覆盖,但不包括 A 传递依赖。我尝试将它作为一个 pom 包含在内,因为我在这里的某个地方读到了,但我得到了相同的结果。

<dependency>
    <groupId>com.projects</groupId>
    <artifactId>B</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>war</type>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>com.projects</groupId>
    <artifactId>B</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>pom</type>
</dependency>

我正在使用最新版本的m2e (1.2) 和m2e-wtp (0.16) 并使用 Maven 配置更新我的项目。

是 m2e-wtp 问题还是我必须以其他方式组织我的项目?


已编辑

我注意到 m2e-wtp 配置存储在 Eclipse 的project./settings/org.eclipse.wst.common.component文件中。这就是我的战争的样子:

<dependent-module deploy-path="/"
    handle="module:/overlay/prj/B?includes=**/**&amp;excludes=META-INF/MANIFEST.MF">
    <dependency-type>consumes</dependency-type>
</dependent-module>
<dependent-module deploy-path="/"
    handle="module:/overlay/slf/?includes=**/**&amp;excludes=META-INF/MANIFEST.MF">
    <dependency-type>consumes</dependency-type>
</dependent-module>

正如我所见,战争依赖项设置为使用,而 jar 依赖项设置为使用

发布的 m2e-wtp 0.17 版似乎没有修复它。


已编辑 (2013-08-30)

今天我又回到了同样的问题。即使我安装了开箱即用的最新稳定版 WTP的 Eclipse 开普勒,这个问题似乎仍然存在。我以为它已经解决了,但我显然错误地检查了它......

4

3 回答 3

5

我认为这不是您的项目组织的问题。您的问题与此 m2e-wtp错误报告非常相似 。

于 2013-02-13T23:00:04.517 回答
1

这似乎是 Eclipse Juno 和 WTP 插件问题。

我有同样的问题,我以这种方式解决了:

  1. 备份您的 Eclipse 工作区和项目代码
  2. 从 Eclipse 中删除您的项目(不删除内容)
  3. 打开命令终端(cmd)
  4. 运行mvn eclipse:clean
  5. 运行mvn eclipse:eclipse -Dwtpversion=2.0
  6. 使用文本编辑器编辑 Eclipse 类路径文件:%PROJECT_PATH%\.classpath
  7. .classpath文件中删除所有具有属性kind="var"的行。例如:

    < classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5 -sources.jar"/>

  8. 保存文件并关闭编辑器。
  9. 在eclipse中,点击:file->Import...->Maven->import existing maven project,再次导入你的项目
  10. Maven -> 更新项目(如果需要)
您可以在 Eclipse 项目属性中的部署程序集上看到问题已解决,并且存在 maven 依赖项。

希望这可以帮助。

于 2013-06-18T21:37:23.167 回答
1

我也有这个问题。我有一个丑陋的解决方法:

所有原始战争的依赖项放在一个单独的项目(类型 jar)中,并使原始战争和覆盖战争都依赖于它。所以对于这个例子:

A.jar -> B.war -> C.war

变成

A.jar -> B-dependencies.jar(创建了名为 B-dependencies 的新模块)

B-dependencies.jar -> B.war

B-dependencies.jar -> C.war

请注意,它并非特定于 Tomcat。我正在使用 JBoss。

于 2013-10-09T13:44:08.653 回答