【发布时间】:2021-10-10 19:47:24
【问题描述】:
在应用程序中使用了两个具有相同名称但用于不同目的的 jar。 例如,jar 的名称是“A1.jar”,具有不同的版本并用于 if else 条件。
if this:
then A1-10.2.3jar.create()
else:
then A1-8.18.0jar.create()
它们又具有不同的 create 方法实现。
问题是当应用程序被加载时,哪个 jar 会在类加载期间被实例化?或者根据条件加载相应的jar?我们如何确保每次都拿起正确的罐子。
问题进一步转移到应用服务器场景,其中两个库都位于 jboss/wildfly 上的 WEB-INF/lib 文件夹中。类加载器会在那里表现如何?
这发生在 wildfly 的一个案例中,其中有相同名称的 jar,但它选择了错误的 jar 并产生了问题。但同样的情况在另一个环境中运行良好。. 是否有任何顺序/优先级?
更新:
类在被调用时是不同的: 说 A2 和 A3 类,然后调用 A1 jar,这些 jar 作为 A2 和 A3 类的依赖项,名称相同但版本不同。
所以,情况就是这样:
if this:
then A2.create()-> calls A1-10.2.3jar.respone()
else:
then A3.create()->calls A1-8.18.0jar.respone()
如果是这种情况,类加载器可以同时加载两个类还是随机加载?
【问题讨论】:
-
如果您正在谈论具有相同名称的类,那是不可能的。一个类加载器只加载一个类一次。
-
如果您的答案仍然成立,请查看更新后的问题。可能有办法解决这个问题。
标签: java jboss wildfly classpath classloader