gpt4 book ai didi

java - EAR 库的类为 WAR 成员抛出 ClassNotFoundException(不同)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:50 26 4
gpt4 key购买 nike

我的 EAR 具有以下结构:

lib/ 
helper.jar (Helper classes used both by war1.war and war2.war)
war1.war
WEB-INF/
lib/
entities1.jar
war2.war
WEB-INF/
lib/
entities2.jar

当 war1 调用 helper.jar 中的类时,它本身调用 Class.forName("a class in war1"),它会抛出一个 ClassNotFoundException

请注意,当 war 类加载 ear/lib 类时,人们通常会遇到 ClassNotFoundException。 我的情况正好相反。

我的 EAR 部署在 Glassfish 3.1.2 中。

我见过类似的情况,但是在JBoss中,“EAR lib's class throwing a ClassNotFoundException for a WAR member”,但是答案说这是一个“循环依赖”的问题。但是,我在这里没有看到任何“循环依赖”问题。在 java 中,即使 ClassY 引用 ClassX,任何 ClassX 都可以引用 ClassY....

最佳答案

helper.jar 中,您不能简单地使用 Class.forName 加载位于 war1.war 中的类。

限制来自 Class.forName 方法使用的默认类加载器,它是企业应用程序的类加载器(加载 helper.jar 的类加载器),它知道只有它的 parent ,而不是它的 child (war1.warwar2.war 类加载器)。

您的问题的解决方案是明确使用 context 类加载器,它按顺序扫描:

war -> ear -> system -> extension -> bootstrap

这可以通过以下方式完成:

Class.forName("war1Class.class",true,Thread.currentThread().getContextClassLoader())

关于java - EAR 库的类为 WAR 成员抛出 ClassNotFoundException(不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15921480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com