WTP - m2e没有部署传递依赖

时间:2013-02-06 11:32:35

标签: eclipse maven m2e eclipse-wtp

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

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

我使用的是Eclipse Juno,而 WTP版本是1.1 。 A.jar是一个工作空间实用程序项目,由B.war包含。 B.war是一个战争项目,由C.war作为叠加层包含在内。那是the way我这样做的:

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

之后,我将C项目部署到Tomcat服务器。如果我手动将Maven生成的war部署到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问题还是我必须以其他方式组织我的项目?


EDITED

我注意到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似乎没有解决它。


EDITED(2013-08-30)

今天我回到了同样的问题。即使我已经安装了带有latest stable release of WTP的Eclipse kepler,这个问题似乎仍然存在。我认为它已经解决了,但我显然错误地检查了它......

3 个答案:

答案 0 :(得分:5)

我认为这不是您的项目组织的问题。您的问题与m2e-wtp bug report非常相似。

答案 1 :(得分: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”的所有行。例如:

      

    &LT; 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“/&GT;

  8.   
  9. 保存档案&amp;关闭编辑。
  10.   
  11. 在eclipse中,点击:file-&gt;导入...-&gt; Maven-&gt;导入现有的maven项目,然后再次导入项目
  12.   
  13. Maven - &gt;更新项目(如果需要)
  14.      您可以在eclipse项目属性中看到部署程序集,问题已解决且maven依赖项存在。

    希望这有帮助。

答案 2 :(得分:1)

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

所有原始战争的依赖关系放在一个单独的项目(类型jar)中,并使原始战争和重叠战争依赖于此。所以例如:

A.jar - &gt; B.war - &gt; C.war

变为

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

B-dependencies.jar - &gt; B.war

B-dependencies.jar - &gt; C.war

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