Eclipse не удалось найти классы XML после JDK 10. Переход пути сборки: разрешение
При попытке переключить путь сборки проекта Maven на JDK 10 в Eclipse пользователи могут столкнуться с проблемой, из-за которой процессы сборки Eclipse не могут найти классы, связанные с XML, в том числе javax.xml.xpath.XPath, org.w3c.dom.Document и org.xml.sax.SAXException. Эти трудности в первую очередь затрагивают классы, производные от зависимости xml-apis-1.4.01.
Корневая причина
Поведение активируется при переходе проекта с Java 1.8 на Java 10 без явного объявления как модуля с использованием файла Module-info.java. Это означает, что код проекта компилируется в безымянный модуль, который имеет полную видимость именованных и неименованных модулей, включая java.xml из системной библиотеки JRE, которая экспортирует эти проблемные пакеты.
Кроме того, xml- apis.java в пути к классам предоставляет еще один набор тех же пакетов. Однако эти пакеты связаны с безымянным модулем, что приводит к нарушению требования «уникальной видимости», определенного в JLS §7.4.3. Следовательно, программа становится недействительной и сталкивается с отказом от компиляторов.
Решение
Для решения этой проблемы можно применить один из трех подходов:
(1) Объявить проект как модуль
Внедрить в проект файл Module-info.java, определяющий какие конкретные модули проект должен прочитать, используя ключевое слово «requires». Этот подход обеспечивает уникальную видимость за счет явного указания того, какие пакеты импортируются.
(2) Ограничить наблюдаемые модули
Без преобразования проекта в модуль можно исключить java.xml из набора наблюдаемых модулей. В Eclipse это можно сделать через диалоговое окно «Сведения о модульности» на вкладке «Содержание». Возможно, потребуется переместить большинство модулей из java.base в столбец «Доступные модули» и выборочно повторно добавить наиболее важные.
(3) Исключить java.xml (ошибка JDK)
Этот подход менее рекомендуется, так как он использует ошибку в javac, которая позволяет недопустимой ситуации пройти компиляцию. Переместив java.xml в конец пути сборки, его можно эффективно скрыть от безымянного модуля. Однако это может привести к неожиданному поведению и не является надежным долгосрочным решением.
В заключение, проблема ненайденного класса, связанная с XML, при переключении на JDK 10 в Eclipse, вызвана нарушением уникальное требование видимости. Проблема решается либо модульностью проекта, либо ограничением наблюдаемых модулей.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3