Chr*_*son 6 spring-test java-9 junit5
我认为这个问题与JDK 9中的模块排除无关(与java.se.ee一样),而是JDK 9 在java.xml模块中包含更新版本的org.w3c.dom.ls没有DocumentLS类.
堆栈跟踪的重要位是:
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring-test/test-container.xml]; nested exception is java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
Run Code Online (Sandbox Code Playgroud)
即使我在此类中包含运行时依赖项,例如xerces:xerces 2.4.0,JDK java.xml模块也是首选(我猜).
我正在使用Gradle 4.1.有没有办法限制JDK提供的模块的范围?
正如您正确分析的那样,该包org.w3c.dom.ls存在于平台模块java.xml中。同一包中的类路径上的任何类都将被忽略。这称为拆分包,并且存在多个修复程序- 以下两个可能会对您有所帮助。
您可以使用以下命令将 Xerxes JAR 的类添加到java.xml模块中--patch-module:
java --patch-module java.xml=xerxes-4.0.0.jar ...
Run Code Online (Sandbox Code Playgroud)
我从未尝试过使用包含某些相同类的 JAR。据我了解,JDK 类将被 Xerxes 类替换,这意味着它们最好是完全二进制兼容的替换。
另一个希望是将java.xml替换为升级模块路径:
升级模块路径(
--upgrade-module-path) 包含模块的已编译定义,旨在用于代替环境(编译时和运行时)内置的可升级模块。
你面临两个问题:
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |