weblogic上的类路径和类加载

Posted

技术标签:

【中文标题】weblogic上的类路径和类加载【英文标题】:classpath and class loading on weblogic 【发布时间】:2011-01-26 18:17:39 【问题描述】:

我正在尝试在 weblogic (10.3.2.0) 中创建和加载动态类。这是我部署到 weblogic 服务器的 ADF 应用程序。

当我打印时

((GenericClassLoader)this.getClass().getClassLoader()).getFinderClassPath()

我看到了我的目录的路径(当然不仅仅是这个路径)

C:\...\system11.1.1.2.36.55.36\DefaultDomain\servers\DefaultServer\tmp\_WL_user\test\753the\dynamicClasses

(我已将目录 dynamicClasses 添加到 用于部署 WAR 配置文件的清单)。 在这个目录中,我创建了类文件。我已经检查过了,文件确实是在那里创建的。 当我尝试使用已为其打印类路径的相同类加载器加载创建的类时,抛出 ClassNotFoundException。

它知道类目录和 jar 文件的路径,但它不加载类。

使用 URLClassLoader 我可以加载类。但我需要这样我的类才能被“通常”加载的类看到。

我可以通过 system CLASSPATH 正确运行它。

请问,你知道解释吗? WAR 中的清单文件是否是指定类路径的错误位置?

提前谢谢你

Qjeta

【问题讨论】:

请注意:因为我需要在运行时创建类,所以我需要知道将它们保存在哪里(这使得方法 getFinderClassPath)并加载它们(以正确设置类路径) 你读过Understanding WebLogic Server Application Classloading:download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/… 是的,但我还没有找到我的问题的答案。我可能会错过一些东西。 【参考方案1】:

您是否尝试过使用斜杠

C:...\system11.1.1.2.36.55.36\DefaultDomain\servers\DefaultServer\tmp_WL_user\test\753the\dynamicClasses\

或者,如果通过 MANIFEST 文件给出,它是否仅适用于 jar 名称,而不适用于目录名称。

【讨论】:

对于 jar 文件,它也不起作用。斜杠没有帮助。看起来清单文件中的类路径由于某种原因被忽略了。感谢回复 排除,最后的MANIFEST是打包在META-INF/下的吧?你能按照这个例子***.com/questions/1272648/… 强制加载 MANIFEST 并检查类路径作为它的属性吗? 我的耳朵里有战争。在两者的清单文件中都将类路径写入我的目录。 getFinderClassPath() 包含指向我的目录的路径,就在清单文件处于战争中时(ear 的清单文件似乎没有任何影响)。当我从所有清单文件中打印出 Class-Path 属性时,我的目录没有路径

以上是关于weblogic上的类路径和类加载的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AWS lambda java 中的类路径加载属性文件

Android 中的类文件和类加载器

Android 中的类文件和类加载器

java中的类加载器ClassLoader和类初始化

探秘类加载器和类加载机制

Tomcat-正统的类加载器架构