У меня есть многомодульное приложение maven.Внутри основного каталога, где находится родительский pom, у меня есть несколько модулей.Я в процессе добавления еще одного на том же уровне, что и другие модули.Приложение упаковано как EAR и развернуто в Websphere, этот EAR настроен на использование разделяемой библиотеки, которая в основном представляет собой каталог, содержащий файлы jar.В этой общей библиотеке находится Apache Crimson, который используется некоторыми модулями.Я добавляю новый модуль на основе Spring Framework 4.0.0.RELEASE.Весь проект является устаревшим и использует Java 6 и Hibernate 2.1 :(. Проблема заключается в том, что этот Crimson вызывает сбой моего нового модуля во время развертывания:
BeanDefinitionStoreException: исключение конфигурации парсера при разборе XML из ресурса ServletContext [/WEB-INF/spring/root-context.xml]; вложенное исключение - javax.xml.parsers.ParserConfigurationException: Невозможно проверить с помощью XSD: ваш поставщик JAXP [org.apache.crimson.jaxp.DocumentBuilderFactoryImpl@86b4 not4 не поддерживаетСхема XML. Работаете ли вы на Java 1.4 с Apache Crimson? Обновитесь до Apache Xerces (или Java 1.5) для полной поддержки XSD.
Поэтому я добавил в свой новый модуль следующее:
`<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.6.2</version>
</dependency`
Но приложение по-прежнему извлекает crimson.jar из общей библиотеки. Я пытался исключить этот crimson.jar из родительского pom, но все же он берется из общей библиотеки. Crimson требуется для некоторых других модулей, упакованных в виде jars, следовательно, crimsonприсутствует уровень EAR / lib. Еще одна попытка была изменить классoader - сначала взять банки из нового модуля, а затем перейти вверх по иерархии (мой новый военный модуль, затем родительское ухо).Но это дало мне еще одно исключение.Вопрос в том, как находясь в модуле WAR внутри модуля EAR, не взять банку с уровня уха (он также был включен в EAR / lib) и взять только с уровня WAR?