gpt4 book ai didi

java - 从 Java 8 升级到 Java 11 后收到加载器约束违规

转载 作者:行者123 更新时间:2023-12-01 13:37:43 27 4
gpt4 key购买 nike

我正在从 升级一个庞然大物的应用程序Java 8 Java 11 .我们仍在 build Java 8 但运行 Java 11 .

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

错误如下:

loader constraint violation: loader 'bootstrap' wants to load interface org.w3c.dom.traversal.NodeIterator. A different interface with the same name was previously loaded by com.app.CustomClassLoader @9626f9, parent loader java.net.URLClassLoader @13afaa3)



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

Java 8:

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



Java 11

INFO | jvm 1 | 2020/01/07 17:45:49.426 | [3.787s][info
][class,load] org.dom4j.NodeIterator source: file:/webapps/lib/dom4j-x.x.x.jar INFO | jvm 1 | 2020/01/07 17:46:15.772 | [30.210s][info ][class,load ] org.w3c.dom.traversal.NodeIterator source: file:/webapps/lib/xml-x.x.x.jar INFO | jvm 1 | 2020/01/07 17:46:15.772 | [30.210s][info ][class,load ] org.w3c.dom.traversal.NodeIterator source: jrt:/java.xml



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

最佳答案

如果您仅在构建期间需要此 Artifact ,则可以将其范围更改为提供
<scope>provided</scope> ,这样 maven 不会为运行时加载这个依赖项

关于java - 从 Java 8 升级到 Java 11 后收到加载器约束违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817466/

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