4

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

  • 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 一起部署。

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

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

我错过了什么,或者这真的是让它工作的唯一方法吗?

4

1 回答 1

4

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

您可以使用项目属性中的部署组件页面编辑部署配置,并在其中添加您的项目“b”:

部署组件

或者,您可以打开配置文件/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 中。

于 2012-06-13T18:26:53.700 回答