2012-05-22 139 views
4

我在Eclipse 3.7.2中创建了一堆项目。让我们给他们的一些名字:在Eclipse WTP中传递项目依赖关系

  • W(动态Web项目)
  • A(某些库)
  • B(有很多共同的东西,出库,所使用的其他项目也是如此)

项目A取决于项目B,因此B在A的构建路径中。项目W取决于项目A,因此我在W中添加了A作为部署程序集。

当我从Eclipse中导出WAR时,只有A的JAR文件被添加到WEB-INF/lib中。 Eclipse显示以下警告:

类路径条目/ B将不会导出或发布。运行时 可能导致ClassNotFoundExceptions。

该警告是正确的。我在运行时得到一个ClassNotFoundExceptions。当然,Eclipse为警告提供了一个快速修复,即“将关联的原始类路径条目标记为发布/导出依赖关系”。但是,这并不能解决我的问题。 B仍然没有与W部署。

我试着在B中手动添加B作为部署程序集。这包括A.jar中的B.jar,这不是我想要的,我仍然得到ClassNotFoundExceptions。

工作的唯一方法是手动将B添加为W中的部署程序集。Eclipse仍显示上面的警告,但运行时异常消失。

我是否错过了一些东西,或者这是真正实现这个目标的唯一方法吗?

+0

你使用的是m2eclipse插件吗? 你使用maven build来生成战争吗? –

+0

目前我没有使用Maven构建战争。这是我想在未来做的事情之一。在那之前,我正在用Eclipse构建战争,它是导出功能。 –

+0

在A的构建路径配置中,尝试将B设置为“已导出” – miniBill

回答

4

为了使Eclipse的“导出/ Web/WAR文件”正常工作,必须将项目“b”显示在“Web App Libraries”容器中。

您可以在项目属性中使用部署大会网页编辑部署配置,并添加在那里,你的项目“B”:

deployment assembly

或者,您也可以在/w/.settings/org.eclipse.wst.common.component打开配置文件,并添加引用项目“b”手动:

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="w"> 
     <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> 
     <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/> 
     <dependent-module archiveName="a.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/a/a"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <dependent-module archiveName="b.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/b/b"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <property name="context-root" value="w"/> 
     <property name="java-output-path" value="/w/build/classes"/> 
    </wb-module> 
</project-modules> 

一旦完成,你会看到项目“b”中的“Web应用程序库”类路径容器,并出口到WAR文件也将添加到b.jar WE B-INF/lib中。

+0

感谢您的回答,所以我已经知道这个解决方案。我希望有更好的方法来做到这一点。理想情况下,Eclipse会自动添加b.jar,因为它已经知道a依赖于b。不知何故,它看起来像WTP不支持这种依赖关系。 –

+1

正如有人所建议的那样,当使用Maven和m2eclipse支持WTP时,将正确地生成具有传递依赖性的项目配置。 –

+0

看起来我真的不得不马上看看Maven。 –