2

我有一个“实用项目”和一个包含该“实用项目”的“EAR 项目”。'Utility Project' 中的所有类最终都打包为 JAR 并放置在导出的 EAR 的 'lib' 目录中,例如:

  EAR.ear
    META-INF
      MANIFEST.MF
    lib
      utility.jar (which expands to):
        META-INF
          MANIFEST.MF
        com
          acme
            Foo.class
            Bar.class

但是,“实用程序项目”依赖于已使用“属性 > Java 构建路径 > 库”添加到构建路径的库 (freemarker.jar)。我要做的就是将 freemarker.jar 添加到 EAR 中,如下所示:

  EAR.ear
    META-INF
      MANIFEST.MF
    lib
      **freemarker.jar**
      utility.jar (which expands to):
        META-INF
          MANIFEST.MF
        com
          acme
            Foo.class
            Bar.class

通过在 Eclipse 中四处搜索,我发现了 4 种实现这一目标的潜在途径,但都没有奏效。如果有人能直截了当地告诉我我应该做什么,那就太好了。但以防万一,我将在这里迭代它们:

从“公用事业项目”属性:

  1. 如果我单击“Java Build Path > Order and Export”并选择“freemarker.jar”进行导出,则 jar 根本不会出现在 EAR 文件中。
  2. 如果我单击“Java EE 模块依赖项”并选择“freemarker.jar”库作为依赖项,它会显示:

这个 JAR 是一个 EAR 项目的捆绑库,应该打包在 EAR 的库目录中。它与您尝试创建的清单类路径依赖项冲突。如果您创建此依赖项,JAR 将被打包在 EAR 的根(不是库)目录中。您确定要继续吗?

从“EAR 项目”属性:

  1. 如果我单击“Java EE Module Dependencies > Add JARs...”并导航到“freemarker.jar”,并使其成为依赖项,它将被添加到 EAR 的根目录:/freemarker.jar
  2. 如果我执行与上述相同的操作,但选中“In Lib Dir”复选框,它将被添加到 lib 文件夹中,但包含在另一个 lib 文件夹中:/lib/lib/freemarker.jar

谢谢。

4

2 回答 2

7

我已经设法解决了这个问题。在“问题”窗口中,我收到以下警告:

类路径条目 /utility-project/lib/freemarker.jar 不会被导出或发布。可能会导致运行时 ClassNotFoundExceptions。

我一时兴起尝试的是使用我一直使用的 Ctrl-1 组合键来为我的源代码获取快速修复解决方案。事实证明,这也为给定的错误和警告提供了快速修复解决方案。我选择了两个选项中的第一个:

将关联的原始类路径条目标记为发布/导出依赖项。

我的问题消失了!

奇怪的是,所有这一切似乎都导致在“Java EE 模块依赖项”属性对话框中选择“freemarker.jar”库,无论如何我自己都是这样做的。这可能是一个 Eclispe 错误!

于 2010-04-28T11:02:50.317 回答
0

@MonoThreaded:使用快速修复 > 将关联的原始类路径条目标记为已发布/导出依赖项后,如果您右键单击项目 > 属性 > 分解程序集,您会注意到 eclipse 添加了一个新条目,类似于源:/ freemaker.jar,部署路径:../lib. 您也可以这样做,方法是选择 Add > Java Build Path Entry。

于 2013-04-24T07:23:47.473 回答