JDK 10 не может импортировать javax.xml.namespace в Eclipse
Это очень странно Я перемещаю динамический веб-проект с Java 8 на Java 10.
Последнее, что я не могу разрешить - это класс javax.xml.namespace.QName.
На прикрепленном снимке экрана видно, что класс QName существует в системной библиотеке JRE, но среда IDE продолжает жаловаться, что QName не может быть преобразовано в тип.
6 ответов
Вероятно, существует дублирующая зависимость, полученная из какой-то другой зависимости.
В затмении
- "Navivate -> Open Type..."
- Введите "java.xml.namespace".
- Если есть результаты, отличные от вашего (Open-)JDK, их необходимо удалить, выполнив следующие действия. В моем случае это был xml-apis
- Откройте свой pom.xml в eclipse и перейдите на вкладку "Иерархия зависимостей", чтобы проверить, какая зависимость вызывается в xml-apis.
- Введите "xml-apis" в фильтр. В моем случае зависимость верхнего уровня, которая вытягивала xml-apis, была "esapi"
исключить 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>
- Щелкните правой кнопкой мыши свой проект и выберите "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 перестроен.