我有多模块 Maven 应用程序。在父 pom 所在的主目录中,我有一些模块。我正在添加另一个与其他模块相同级别的模块。该应用程序是打包为 EAR 并部署到 Websphere 中,此 EAR 配置为使用共享库,该库基本上是一个包含 jar 的目录。在这个共享库中,Apache Crimson 被一些模块使用。我正在添加基于 Spring Framework 4.0.0.RELEASE 的新模块。整个项目是一个遗留项目,使用 Java 6 和 Hibernate 2.1 :( 。问题是这个 Crimson 使我的新模块在部署过程中崩溃:
BeanDefinitionStoreException:解析器配置异常从ServletContext资源解析XML[/WEB-INF/spring/root-context.xml];嵌套异常是 javax.xml.parsers.ParserConfigurationException: Unable to validate using XSD: Your JAXP provider [org.apache.crimson.jaxp.DocumentBuilderFactoryImpl@706b4db8] 不支持 XML Schema。您是否使用 Apache Crimson 在 Java 1.4 上运行?升级到 Apache Xerces(或 Java 1.5)以获得完整的 XSD 支持。
所以我在我的新模块中添加了这个:
`<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.6.2</version>
</dependency`
但是应用程序仍然从共享库中获取 crimson.jar。我试图从父 pom 中排除这个 crimson.jar,但它仍然是从共享库中获取的。一些其他模块需要 Crimson 被打包为 jar,因此 crimson 存在于 EAR/lib 级别。另一种尝试是更改类加载器顺序以首先从新模块中获取罐子,然后在层次结构中向上(我的新战争模块然后是父耳朵)。但这给了我一些其他的例外。问题是 - 如何在 EAR 模块内的 WAR 模块中不从耳朵级别获取 jar(它也包含在 EAR/lib 中)并且仅从 WAR 级别获取?