Eclipse WTP中的传递项目依赖项

时间:2012-05-22 20:35:58

标签: eclipse eclipse-wtp

我在Eclipse 3.7.2中创建了一堆项目。让我们给他们一些名字:

  • W(动态网站项目)
  • A(某些图书馆)
  • B(一个包含许多常见内容的库,也被其他项目使用)

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

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

  

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

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

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

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

我是否遗漏了某些东西,或者这是否真的是让这项工作成功的唯一途径?

1 个答案:

答案 0 :(得分:4)

为了使Eclipse的“Export / Web / WAR File”工作,您必须使您的项目“b”出现在“Web App Libraries”容器中。

您可以使用项目属性中的Deployment Assembly页面编辑部署配置,并在其中添加项目“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>

完成后,您将在“Web App Libraries”类路径容器中看到项目“b”,导出到WAR文件也会将b.jar添加到WEB-INF / lib中。