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

问题描述 投票:2回答:1

我正在将一个庞然大物的应用程序从Java 8升级到Java 11。我们仍然使用Java 8进行构建,但是使用Java 11进行运行。

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

错误在下面:

违反加载程序约束:加载程序'bootstrap'要加载org.w3c.dom.traversal.NodeIterator接口。不同的界面com.app.CustomClassLoader先前加载了具有相同名称的文件@ 9626f9,父加载器java.net.URLClassLoader @ 13afaa3)

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

Java 8:

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

Java 11中>

信息| jvm 1 | 2020/01/07 17:45:49.426 | [3.787s] [信息] [class,load] org.dom4j.NodeIterator源:文件:/webapps/lib/dom4j-x.x.x.jar jvm 1 | 2020/01/0717:46:15.772 | [30.210s] [info] [class,load]org.w3c.dom.traversal.NodeIterator来源:文件:/webapps/lib/xml-x.x.x.jar jvm 1 | 2020/01/0717:46:15.772 | [30.210s] [info] [class,load]org.w3c.dom.traversal.NodeIterator来源:jrt:/java.xml

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

我正在将一个庞然大物的应用程序从Java 8升级到Java11。我们仍在使用Java 8进行构建,但仍在Java 11上运行。由于加载程序的限制,我看到类无法正确加载...

java maven classloader java-11
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.