0

JDeveloper 10.1.3.x

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

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

我的项目中未导出的库包括在内。我的项目依赖项中未导出的库确实包含在内。

这是一个错误还是一个功能,我可以改变这种行为,使我的项目依赖项中未导出的库也不会被包含在其中吗?

谢谢,史蒂夫

4

2 回答 2

0

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

恕我直言,在 Eclipse 或 <在此处插入另一个 IDE> 和 JDeveloper 之间进行选择时,选择 Eclipse 是明智的。

我之前提到的莫名其妙的行为之一是 JDeveloper 编译应用程序目录中的所有项目的问题,即使它们不是当前工作空间文件(jws文件)的一部分。换言之,JDeveloper 将考虑将 JPR 文件包含在工作区中,即使 JWS 文件另有说明(即,它不会在 JDeveloper 工作区中直观地出现)。

于 2009-09-12T21:55:19.597 回答
0

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

于 2009-09-16T12:25:37.257 回答