Eclipse kann XML-Klassen nach JDK 10-Build-Pfad-Übergang nicht finden: Lösung
Beim Versuch, den Build-Pfad eines Maven-Projekts auf JDK 10 umzustellen Innerhalb von Eclipse können Benutzer auf ein Problem stoßen, bei dem Eclipse-Build-Prozesse XML-bezogene Klassen nicht finden können, einschließlich javax.xml.xpath.XPath, org.w3c.dom.Document und org.xml.sax.SAXException. Diese Schwierigkeiten betreffen hauptsächlich Klassen, die von der xml-apis-1.4.01-Abhängigkeit abgeleitet sind.
Ursache
Das Verhalten wird ausgelöst, wenn ein Projekt von Java 1.8 auf Java übergeht 10 ohne explizite Deklaration als Modul mithilfe einer module-info.java-Datei. Dies bedeutet, dass der Code des Projekts im unbenannten Modul kompiliert wird, das die vollständige Sichtbarkeit benannter benannter und unbenannter Module bietet, einschließlich java.xml aus der JRE-Systembibliothek, die diese problematischen Pakete exportiert.
Darüber hinaus ist xml- apis.java im Klassenpfad stellt einen weiteren Satz derselben Pakete bereit. Diese Pakete sind jedoch mit dem unbenannten Modul verknüpft, was zu einem Verstoß gegen die Anforderung der „eindeutigen Sichtbarkeit“ gemäß JLS §7.4.3 führt. Folglich wird das Programm ungültig und wird von den Compilern abgelehnt.
Lösung
Um dieses Problem zu lösen, kann einer von drei Ansätzen gewählt werden:
(1) Projekt als Modul deklarieren
Fügen Sie eine module-info.java-Datei innerhalb des Projekts ein und definieren Sie welche Bestimmte Module, die das Projekt lesen soll, können mithilfe des Schlüsselworts „requires“ definiert werden. Dieser Ansatz gewährleistet eine eindeutige Sichtbarkeit, indem explizit angegeben wird, welche Pakete importiert werden.
(2) Beobachtbare Module begrenzen
Ohne das Projekt in ein Modul zu konvertieren, ist ein Ausschluss möglich java.xml aus der Menge der beobachtbaren Module. In Eclipse kann dies über das Dialogfeld „Modularitätsdetails“ auf der Registerkarte „Inhalt“ erfolgen. Es kann erforderlich sein, die meisten Module außer java.base in die Spalte „Verfügbare Module“ zu verschieben und wesentliche Module selektiv erneut hinzuzufügen.
(3) java.xml ausschließen (JDK-Fehler)
Dieser Ansatz wird weniger empfohlen, da er einen Fehler in Javac ausnutzt, der es der illegalen Situation ermöglicht, die Kompilierung zu passieren. Durch das Verschieben von java.xml an das Ende des Build-Pfads kann es effektiv vor dem unbenannten Modul ausgeblendet werden. Dies kann jedoch zu unerwartetem Verhalten führen und stellt keine zuverlässige langfristige Lösung dar.
Zusammenfassend lässt sich sagen, dass das XML-bezogene Problem mit der nicht gefundenen Klasse beim Wechsel zu JDK 10 in Eclipse durch einen Verstoß gegen die verursacht wird einzigartige Sichtbarkeitsanforderung. Das Problem wird gelöst, indem entweder das Projekt modularisiert oder die beobachtbaren Module eingeschränkt werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3