Изменение порядка банок в проекте eclipse
Недавно я преобразовал проект Java eclipse в динамический веб-проект. Импортированные банки, перечисленные в обоих проектах до и после, одинаковы, но изменение в динамическом веб-проекте вызывает следующую ошибку компиляции:
W3C_XML_SCHEMA_NS_URI cannot be resolved or is not a field
который будет выбрасываться следующей строкой кода:
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Я исследовал эту ошибку и, похоже, ее выбрасывают конфликтующие версии javax.xml.XMLConstants
в разных баночках, но я сравнивал списки банок в обоих проектах, и они идентичны, поэтому Я думаю, что нужно измените порядок банок. Как это сделать?
Часть решения может логически включать выяснение, какие банки включают пакет с именем javax.xml.XMLConstants
. Поэтому я последовал за советом @DiogoSantana и использовал мастер "Тип" для получения результатов на следующем экране печати:
![typewizard.jpg]()
Затем я последовал совету DiogoSantana и побежал mvn dependency:tree
и получил следующие результаты:
![dependencytree.jpg]()
Затем я сделал следующее изменение в pom.xml
:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
<exclusions>
<exclusion>
<groupId>jsr173_api</groupId>
</exclusion>
</exclusions>
</dependency>
И затем я запустил mvn clean install
перед обновлением проекта eclipse и даже выполнил maven..update project
из eclipse, но ошибка остается.
Примечание: поиск строки infoset
в pom
не дал никаких результатов, поэтому я попробовал следующий более высокий уровень jar
.
Ответы
Ответ 1
В наши дни (в Java 6 и новее) вам не нужны явные JAXB, JAX-WS, XML Streaming API (JSR-173) или баннеры SAAJ, потому что все они включены в JDK. Существует много других API, не связанных с XML, которые обычно доступны, например javax.activation.
Вы должны исключить все, что связано с ними, если ваша среда - это Java 6 или новее.
Ответ 2
У меня была такая же проблема, и я смог решить ее, выполнив следующие действия:
- Щелкните правой кнопкой мыши модуль, содержащий файл с ошибкой.
- Нажмите "Свойства"
- Слева выберите "Java Build Path"
- Теперь справа выберите вкладку "Заказ и экспорт"
- Нажмите "Системная библиотека JRE" и нажмите кнопку "Вверх", чтобы переместить его в начало "Зависимости Maven".
Ответ 3
Чтобы исправить это, откройте меню Build-Path вашего проекта, перейдите на вкладку "Заказ и экспорт" и убедитесь, что библиотека Java System находится в верхней части списка, чем зависимости Maven.
Ответ 4
Fisrt использует зависимость mvn: tree для определения зависимости, которая зависит от jsr173_api.
Предположим, что это спящий режим, как вы упомянули (я не знаю, верно ли это, не проверял). Вы должны исключить jsr173_api следующим образом:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
<exclusions>
<exclusion>
<groupId>jsr173_api</groupId>
</exclusion>
</exclusions>
</dependency>
Ответ 5
Просто, чтобы пропустить ошибку и продолжить выполнение кода, просто включите следующую строку в свой код. Он будет работать.
final String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema";