Eclipse ne parvient pas à localiser les classes XML après la transition du chemin de construction du JDK 10 : résolution
Lors de la tentative de basculement du chemin de construction d'un projet Maven vers le JDK 10 dans Eclipse, les utilisateurs peuvent rencontrer un problème où les processus de construction d'Eclipse ne parviennent pas à localiser les classes liées à XML, notamment javax.xml.xpath.XPath, org.w3c.dom.Document et org.xml.sax.SAXException. Ces difficultés affectent principalement les classes dérivées de la dépendance xml-apis-1.4.01.
Cause première
Le comportement est déclenché lorsqu'un projet passe de Java 1.8 à Java 10 sans être explicitement déclaré comme module à l'aide d'un fichier module-info.java. Cela signifie que le code du projet est compilé dans le module sans nom, qui a une visibilité complète des modules nommés et sans nom, y compris java.xml de la bibliothèque système JRE, qui exporte ces packages problématiques.
De plus, xml- apis.java sur le chemin de classe fournit un autre ensemble de ces mêmes packages. Cependant, ces packages sont associés au module sans nom, conduisant à une violation de l'exigence de « visibilité unique » telle que définie dans JLS §7.4.3. Par conséquent, le programme devient invalide et est rejeté par les compilateurs.
Solution
Pour résoudre ce problème, l'une des trois approches suivantes peut être adoptée :
(1) Déclarer le projet en tant que module
Introduire un fichier module-info.java dans le projet, définissant les modules spécifiques que le projet doit lire via le utilisation du mot-clé "requiert". Cette approche garantit une visibilité unique en indiquant explicitement quels packages sont importés.
(2) Limiter les modules observables
Sans convertir le projet en module, il est possible d'exclure java.xml à partir de l'ensemble des modules observables. Dans Eclipse, cela peut être accompli via la boîte de dialogue « Détails de la modularité », sous l'onglet « Contenu ». Il peut être nécessaire de déplacer la plupart des modules, à l'exception de java.base, vers la colonne "Modules disponibles" et de rajouter sélectivement les modules essentiels.
(3) Exclure java.xml (bug JDK)
Cette approche est moins recommandée, car elle profite d'un bug de javac qui permet à la situation illégale de passer la compilation. En déplaçant java.xml à la fin du chemin de construction, il peut être efficacement masqué du module sans nom. Cependant, cela peut conduire à un comportement inattendu et ne constitue pas une solution fiable à long terme.
En conclusion, le problème de classe non trouvée lié à XML lors du passage au JDK 10 dans Eclipse est dû à une violation des exigence de visibilité unique. Le problème est résolu soit en modularisant le projet, soit en limitant les modules observables.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3