2010-04-27 21 views
2

我有一个'Utilty Project'和一个包含'Utility Project'的'EAR Project'。一切从“实用工具项目”结束了类被包装成一个JAR并放置在导出的EAR的“LIB”目录中,例如:如何确保在Eclipse Galileo的最终EAR中包含Utility Projects库依赖项?

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

然而,“工具项目”依赖于库(freemarker.jar),它已经使用'Properties> Java Build Path> Libraries'添加到构建路径中。所有我想要做的是让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 

通过我找到了4种潜在的途径实现这一目标,没有一个是有工作在Eclipse中摸索。如果有人能够开始追逐并告诉我我应该怎么做,那会很棒。但是为了以防万一,我会在这里迭代他们:

从“实用工具项目”属性:

  1. 如果我点击“Java构建路径>排序和导出”,然后选择“freemarker.jar '用于导出,jar完全不在EAR文件中。
  2. 如果我点击“的Java EE模块依赖”,然后选择“freemarker.jar”库作为依赖,它说:

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

从 'EAR项目' 属性:

  • 如果我点击 '的Java EE模块依赖>添加JAR文件...',然后导航到“的freemarker .jar',并使其成为依赖项,它将被添加到EAR的根目录中: /freemarker.jar
  • 如果我按照上述步骤操作,但选中'In Lib Dir'复选框,它会被添加到lib文件夹,但包含在另一个lib文件夹中: /lib/lib/freemarker.jar
  • 谢谢。

    +0

    如果有一些完全不同的方式将JAR放入EAR项目库目录中,而不涉及从依赖项目获取它,那对我来说也是很好的。我只需要一个解决方案:-) – freemarshall 2010-04-27 21:51:38

    回答

    7

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

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

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

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

    我的问题消失了!

    奇怪的是,所有这些似乎都是为了在'Java EE Module Dependencies'属性对话框中选择'freemarker.jar'库,我仍然在做自己的工作。这可能是一个Eclispe错误!

    +0

    非常感谢您花时间回答您自己的问题。刚刚救了我几个小时的深夜工作。 – minimo 2012-09-02 08:32:58

    +1

    我一直使用Ctrl + 1,但我想知道如何在没有这个技巧的情况下做到这一点。 – MonoThreaded 2013-04-12 09:45:52

    0

    @MonoThreaded:在使用快速修复之后>将关联的原始类路径条目标记为发布/导出依赖项,如果右键单击项目> properties> depolyment assembly,您会注意到eclipse添加了一个新条目,像source:/freemaker.jar,部署路径:../lib。你也可以通过选择Add> Java Build Path Entry来实现。

    相关问题