#java #maven #dom #dependencies #xerces
#java #maven #dom #зависимости #xerces
Вопрос:
Я использую Maven в своем проекте, и у меня есть сторонняя библиотека, которая использует Xerces. В моем проекте есть несколько других модулей Maven, которые имеют в своих зависимостях некоторые другие библиотеки XML. Итак, моя проблема в том, что когда я использую эту стороннюю библиотеку в зависимом проекте maven, она работает нормально. И когда я использую его в модуле maven в своем проекте, он генерирует некоторые исключения.
org.w3c.dom.ls.LSException: unknown protocol: c
at com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl.writeToURI(DOMSerializerImpl.java:1010)
at generators.Generator.setConf(Generator.java:1567)
Когда я отлаживал оба проекта, я заметил, что во втором он создает экземпляр DOMSerializerImpl
класса form com.sun.org.apache.xml.internal.serialize
package, а в первом используется org.apache.xml.serialize
package . Несмотря на то, что в моих pom-файлах обоих проектов указаны одни и те же зависимости.
Зависимости этой библиотеки этой стороны:
<dependency>
<groupId>xml-resolver</groupId>
<artifactId>xml-resolver</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>xalan</groupId>
<artifactId>serializer</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesSamples</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
Кто-нибудь может мне помочь?
Комментарии:
1. Что произойдет, если вы просто используете встроенные библиотеки Xerces?
2. Я не использую Xerces в своем проекте, но он используется этой библиотекой, от которой я завишу. И, если я создаю проект, используя только его и с их зависимостями (включая Xerces), выполнение проходит без каких-либо исключений.
3. Если ваша сторонняя библиотека была создана с помощью maven, она должна использовать необходимые зависимости. Если это еще не сделано, вам нужно выяснить, какие именно версии он ожидает.
4. Можете ли вы предоставить дополнительную информацию о <зависимостях>, которые включены в ваш проект pom? Список, который вы включили, взят из стороннего pom, что полезно, но также необходимы сведения о вашем pom.
5. попробуйте выполнить «mvn help: effective-pom» и посмотрите на зависимости там. что-нибудь странное? Также «зависимость mvn: дерево» помогает выяснить, откуда берется материал (я думаю, вы знаете, в каких банках находится класс?). обычно выигрывает зависимость, которая ближе всего к вашему модулю. Цель depedency: tree обычно указывает, какой из них был выбран в пользу другого.