Eclipse 無法定位JDK 10 建置路徑轉換後的XML 類別:解決方案
嘗試將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 檔案明確宣告為模組。這意味著專案的程式碼是在未命名模組中編譯的,該模組對命名的命名模組和未命名模組具有完全可見性,包括 JRE 系統庫中的 java.xml,該程式庫導出這些有問題的套件。
此外,xml-類別路徑上的 apis.java 提供了另一組相同的套件。然而,這些套件與未命名的模組關聯,導致違反 JLS §7.4.3 中定義的「唯一可見性」要求。因此,程式將變得無效並面臨編譯器的拒絕。
解決方案
要解決此問題,可以採用以下三種方法之一:
(1) 將專案宣告為模組
專案內部引進一個module-info.java 文件,定義具體哪些模組專案應該仔細閱讀「requires」關鍵字的使用。這種方法透過明確說明匯入哪些套件來確保唯一的可見性。
(2) 限制可觀察模組
如果不將項目轉換為模組,則可以排除來自可觀察模組集的 java.xml。在 Eclipse 中,這可以透過「內容」標籤下的「模組化詳細資料」對話方塊來完成。可能需要將除 java.base 之外的大多數模組推送到「可用模組」列,並選擇性地重新添加必要的模組。
(3) 排除java.xml (JDK Bug)
不太推薦這種方法,因為它利用了javac 中的一個錯誤,允許非法情況通過編譯。透過將 java.xml 移至建置路徑的末尾,可以有效地對未命名模組隱藏它。然而,這可能會導致意外的行為,並且不是一個可靠的長期解決方案。
總之,在 Eclipse 中切換到 JDK 10 時出現與 XML 相關的類別未找到問題是由於違反了獨特的可見性要求。該問題可以透過模組化專案或限制可觀察的模組來解決。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3