当前位置: 首页 > 知识库问答 >
问题:

从Java 8升级到Java 11后,收到加载程序约束冲突

狄楷
2023-03-14

我正在将一个庞大的应用程序从Java8升级到Java11。我们仍在使用Java8构建,但使用Java11运行。

由于加载器约束违规,我看到一个类没有正确加载。代码库通过html" target="_blank">maven依赖项中的jar文件导入此类。如果我们在启动应用程序之前删除jar文件,问题就会消失。

错误如下:

加载程序约束冲突:加载程序“引导”想要加载接口组织。w3c。多姆。穿越。NodeIterator。com以前加载了同名的不同接口。应用程序。CustomClassLoader@9626f9,父加载程序java。网URLClassLoader@13afaa3)

我发现以前这个类是先由引导类加载器加载的。现在它先由自定义应用程序加载器加载。顺序差异如下:

Java 8:

INFO | jvm 1 | 2020/01/08 11:34:30.626 |[从/java-1.8.0_221.i586/jre/lib/rt.jar加载org.w3c.dom.traversal.NodeIterator]INFO | jvm 1 | 2020/01/08 11:34:34.184[从文件加载org.dom4j.NodeIterator:/webapps/lib/dom4j-x.x.jar]

在11Java

信息| jvm 1 | 2020/01/07 17:45:49.426 |[3.787s][INFO
][class,load]org。dom4j。节点运营商来源:文件:/webapps/lib/dom4j-x.x.jar INFO | jvm 1 | 2020/01/07 17:46:15.772 |[30.210s][INFO][class,load]org。w3c。多姆。穿越。节点运营商来源:文件:/webapps/lib/xml-x.x.jar INFO | jvm 1 | 2020/01/07 17:46:15.772 |[30.210s][INFO][class,load]org。w3c。多姆。穿越。节点编辑器来源:jrt:/java。xml

在启动前手动删除xml-x.x.x.jar可以防止这种情况发生。我正在尝试在不删除该jar或依赖项的情况下解决这个问题。有没有办法强制引导类加载器先加载xml-x.x.x.jar文件?我尝试在bootclasspath中添加jar文件,但没有解决它。

共有1个答案

单于淇
2023-03-14

如果您只在构建期间需要这个工件,您可以将其范围更改为提供的

 类似资料:
  • 在Jersey升级期间,来自com的许多API。太阳支持Java11的jersey 2.29不支持jersey。以下API的替代方案应该是什么?

  • 我见过其他的链接错误,但没有一个能说明如何使用罐子。当我在Jboss中部署我的应用程序时,它可以正常工作,但当我将应用程序部署到websphere时,我遇到了这种链接错误。在这里可以找到一个类似的问题:调用webservice方法时出现LinkageError,但不确定如何修复它 它主要是从和加载的,带有共享类 我所拥有的是jsp调用Web服务。从消息中,我看到的唯一jars来自axis.jar,

  • 我在WebSphereApplicationServer(8.5.5.14)中遇到了LinkageError。这里也发现了类似的问题LinkageError 原因:java。lang.LinkageError:解析方法“javax/xml/soap/SOAPElement.getElementQName()Ljavax/xml/namespace/QName;”时加载约束冲突:loader“com

  • Java(TM)SE运行时环境(构建1.8.0_102-B14) Java HotSpot(TM)64位服务器VM(构建25.102-B14,混合模式) 我知道jdk11不包含jre,但是我如何在java 11中从cmd运行java程序呢

  • 今天我安装了JDK11,我所有的JavaFX东西都变得混乱了。公平地说,甲骨文可以做他们想做的事情。我试图让我的项目回到可运行的状态,这是我第一次遇到这种模块化的东西,所以不知道到底发生了什么。 我已经设法将这些库作为Maven中的依赖项导入(尽管它在Maven中找不到某些库的版本11,我最终使用11-EA+19来实现javafx-controls等--不管怎样…),所以我的代码可以很好地编译这些