Eclipse Build Path Issue with XML Classes after Migration to JDK 10
When migrating a Maven project from Java 8 to JDK 10, Eclipse users may encounter a build error involving classes such as javax.xml.xpath, org.w3c.dom.Document, and org.xml.sax.SAXException. This issue arises specifically when switching the project's Java Build Path to JDK 10.
Root Cause
The issue stems from the fact that the project lacks a module-info.java file. This setup results in the code being compiled in the "unnamed module." The unnamed module can load packages from all the observable modules and in this case includes packages such as java.xml from the Java Runtime Environment and xml-apis from the Maven dependency.
Rule Violation
This situation contravenes the Java Language Specification (JLS) §7.4.3, which demands unique visibility for qualified type names. In this case, the packages from java.xml and xml-apis provide conflicting definitions for java.xml.xpath and related classes.
Solutions
1. Add a module-info.java File
Implement a module-info.java file and specify the required modules, either requires java.xml; or requires xml.apis;, to resolve the visibility issue.
2. Exclude java.xml from Observable Modules
Avoid the clash by excluding java.xml from the observable modules list. This can be achieved through the "Modularity Details" dialog within Eclipse.
Implications and Conclusion
While javac may not reject the erroneous code, it is incorrect according to the JLS. The Eclipse error messaging has since been improved to provide a more specific indication of the underlying problem. Developers are advised to adhere to Java's modularity guidelines and ensure unique visibility for their modules to prevent such build errors.
The above is the detailed content of Why Am I Getting Eclipse Build Path Errors with XML Classes After Migrating to JDK 10?. For more information, please follow other related articles on the PHP Chinese website!