1

我在 Weblogic 中的应用程序中遇到了一些类加载问题。我的代码中有一些地方的类依赖于其他 jar 中的类,我必须缺少一些基本的东西。

通过查看我可以找到的信息,如果两个 jar 都在类路径上,这应该不是问题,但这在 Weblogic 上的 Java EE 应用程序上下文中似乎更加微妙。

我有一只耳朵,MyApp.ear

MyApp.ear 包含几个 webapps (war) 和一大堆实用程序 jar 和 EJB。结构是这样的(我不控制它)。

MyApp.ear
     MyWebApp.war
     UtilJar1.jar
     UtilJar2.jar
     etc...

假设 UtilJar1 中有从 UtilJar2 导入类的类。什么 MANIFEST.MF 应该指定两个 jar 都应该在类路径上?耳朵?Webapp 的?UtilJar1 的?

从反复试验(Weblogic 10.3.2)来看,这似乎可行的唯一方法是在 UtilJar1 的清单类路径中定义 UtilJar2。但我会认为在 webapp 的上下文中,webapp 的类路径将用于该 webapp 中发生的任何类加载?相反,除非在第一个 jar 的类路径中指定了第二个 jar,否则我会看到 NoClassDefFound。

4

1 回答 1

0

以下是 Oracle 文档的摘录:

J2EE 规范提供清单 Class-Path 条目作为模块指定它需要类的辅助 JAR 的一种方式。

如果您有其他支持 JAR 文件作为 EJB JAR 或 WAR 文件的一部分,则只需要使用此清单 Class-Path 条目。

请浏览以下文档中的清单类路径部分 -

类加载

J2ee 部署档案 [EAR] 是不同模块的组合,每个模块在各自的清单文件中声明依赖关系。

根据我的理解,EAR 中的每个模块 [war, ejb,jar] 都会有自己的类加载器,它们是 EAR 类加载器的子类。除非您在 Manifest 文件中声明依赖项,否则子类加载器将仅对其父类可见,并且不知道兄弟类加载器。

在此处输入图像描述

即使 WAR 清单中有一个条目,utilit1.jar 也不知道utility2.jar,您必须在 Utility1.jar 的 Manifest 文件中明确提及依赖关系。

于 2013-08-12T10:22:12.337 回答