【问题标题】:Jdev project dependency librariesJdev项目依赖库
【发布时间】:2009-09-11 14:46:57
【问题描述】:

JDeveloper 10.1.3.x

我最近了解到,未导出的库在部署到嵌入式 OC4J 容器时不会包含在类路径中,因为它在 application-oc4j-app.xml 文件中没有库条目。

我还向自己证明,在我的项目所依赖的项目中导出的库包含在 application-oc4j-app.xml 文件中。

我的项目中未导出的库包含在内。我的项目依赖项中未导出的库会被包含在内。

这是错误还是功能,我是否可以更改该行为以使我的项目依赖项中未导出的库也不会被包含在内?

谢谢, 史蒂夫

【问题讨论】:

    标签: jdeveloper


    【解决方案1】:

    未导出的库不应包含在 application-oc4j-app.xml 文件中。 JDeveloper 中似乎存在错误或某些莫名其妙的行为。

    恕我直言,在 Eclipse 或 和 JDeveloper 之间进行选择,选择 Eclipse 是明智的。

    我之前提到的一个莫名其妙的行为是 JDeveloper 编译应用程序目录中的所有项目的问题,即使它们不是当前工作区文件(jws 文件)的一部分。换句话说,JDeveloper 将考虑将 JPR 文件包含在工作区中,即使 JWS 文件另有说明(即它不会在 JDeveloper 工作区中以可视方式显示)。

    【讨论】:

    • 如果我可以就您的莫名其妙的行为提供帮助,我已经找到了类似的原因,即在另一个项目上建立的依赖项即使从工作区中删除也仍然存在.当您不期望它们构建不在工作区中的项目时,这可能会令人困惑。如果您将子项目添加回工作区,您将看到依赖标志重新出现在父项目中。您也可以通过直接编辑父项目文件来识别不可见的依赖项。
    • 啊,是的,这是您只能通过反复试验才能找到的众多事物之一。出于这个原因,我避免使用 JDev + 嵌入式 OC4J。使用 Ant/Maven 并将应用程序部署在独立的 OC4J 实例上会更有效率。
    • 我不确定您的问题是否已经解决。你能确认一下吗?
    • 我希望我的解决方案不限于莫名其妙的行为。问题在于log4j是封装在第三方连接器中的,而我的项目和依赖需要log4j才能编译。他们必须在运行时使用连接器中的 log4j,但即使未导出 log4j,它也会包含在依赖项中。我的应用程序无法使用重复的 log4j 库运行,或者由于缺少 log4j 类而出现编译错误。我正在解决“尽管出现编译错误但仍运行项目”标志的问题,但希望有更好的解决方案。
    • 是否与radio.weblogs.com/0118231/2004/04/29.html#a297 中描述的问题有关?
    【解决方案2】:

    到目前为止,我还没有找到一种方法来为构建和运行时指定不同的类路径,但是在一位同事的帮助下,偶然发现了针对我的具体情况的解决方案。即使连接器不是 JDev 项目,依赖项目也可以引用与它一起打包和加载的 log4j jar 文件。这有效地模拟了运行时的行为,无论是独立的还是嵌入式的 oc4j 容器部署,其中 Web 应用程序和关联的应用程序代码链接到由第 3 方 JCA 连接器的类加载器加载的 log4j 实例。假设由两个不同的类加载器加载的 log4j 库相对于 log4j 的静态初始化程序仍然看起来是该库的两个不同实例,我认为这不会起作用。 (这就是我假设的动机,如果 log4j 在类加载器层次结构中找到它自己的另一个实例,它会引发异常。)显然情况并非如此,至少对于嵌入式场景而言。我不必为独立容器测试这个,因为 Maven 构建知道不通过构建文件中的“提供”范围规范在应用程序 EAR 文件中包含 log4j 库 jar 的副本。嵌入式 OC4J 容器现在加载 JCA 连接器、关联的 log4 库实例、部署应用程序,并允许两者使用同一 log4j 库文件中的 log4j 类。不完全确定连接器和 Web 应用程序类加载器如何交互,但它现在可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2017-04-06
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多