Изменение порядка банок в проекте 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";