我正在将一个庞大的应用程序从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文件,但没有解决它。
如果您只在构建期间需要这个工件,您可以将其范围更改为提供的
在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等--不管怎样…),所以我的代码可以很好地编译这些
和server.xml: