JDK 10 не может импортировать javax.xml.namespace в Eclipse

Это очень странно Я перемещаю динамический веб-проект с Java 8 на Java 10.

Последнее, что я не могу разрешить - это класс javax.xml.namespace.QName.

На прикрепленном снимке экрана видно, что класс QName существует в системной библиотеке JRE, но среда IDE продолжает жаловаться, что QName не может быть преобразовано в тип. Скриншот

6 ответов

Вероятно, существует дублирующая зависимость, полученная из какой-то другой зависимости.

В затмении

  1. "Navivate -> Open Type..."
  2. Введите "java.xml.namespace".
  3. Если есть результаты, отличные от вашего (Open-)JDK, их необходимо удалить, выполнив следующие действия. В моем случае это был xml-apis
  4. Откройте свой pom.xml в eclipse и перейдите на вкладку "Иерархия зависимостей", чтобы проверить, какая зависимость вызывается в xml-apis.
  5. Введите "xml-apis" в фильтр. В моем случае зависимость верхнего уровня, которая вытягивала xml-apis, была "esapi"
  6. исключить xml-apis из зависимости esapi:

    <dependency>
        <groupId>org.owasp.esapi</groupId>
        <artifactId>esapi</artifactId>
        <version>2.2.0.0</version>
    
        <exclusions>
            <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
            </exclusion>
        </exclusions>
    
    </dependency>
    
  7. Щелкните правой кнопкой мыши свой проект и выберите "Maven -> Обновить проект...". Проверьте свой проект и нажмите ОК.

это оно

У меня была та же ошибка при переходе с Java 8 на Java 11, и я включил явную зависимость от библиотеки stax-api 1.0-2:

<dependency>
  <groupId>javax.xml.stream</groupId>
  <artifactId>stax-api</artifactId>
  <version>1.0-2</version>
</dependency>

и исключил любую переходную зависимость от библиотеки stax-api 1.0.1:

    ...
    <exclusion>
      <groupId>stax</groupId>
      <artifactId>stax-api</artifactId>
    </exclusion>
    ...

После этого моя среда IDE правильно нашла потерянный файл импорта javax.xml.namespace.QName.

Надеюсь, это поможет.

Попробуйте изменить порядок элементов на вашем пути к классам. JRE должно быть до Maven Dependencies. Это решает проблему.

Я предполагаю, что компилятор Java 10 замечает, что вы пытаетесь заменить внутренние классы (java.xml.namespace) с кодом из файлов JAR, и это не нравится.

У меня был такой же опыт работы с JRE 11 и Gradle 7.5. Если это кому-то поможет, вы можете исключить xml-apis как таковой:

      configurations {
    all {
        exclude group: 'xml-apis', module: 'xml-apis'
    }
}

Это сработало! Проверка на множественные типы Ctrl+Shift+T, удаление ненужных.

Решил это, удалив jsr173_api.jar из пути к классам проекта (проект -> свойства -> путь сборки java -> библиотеки -> путь к классам). Он появляется снова, когда проект eclipse перестроен.

Другие вопросы по тегам