”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么切换到 JDK 10 后 Eclipse 无法找到我的 XML 类?

为什么切换到 JDK 10 后 Eclipse 无法找到我的 XML 类?

发布于2024-12-22
浏览:670

Why Can\'t Eclipse Find My XML Classes After Switching to JDK 10?

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 相关的类未找到问题是由于违反了独特的可见性要求。该问题可以通过模块化项目或限制可观察的模块来解决。

最新教程 更多>
  • 节流解释:管理 API 请求限制的指南
    节流解释:管理 API 请求限制的指南
    什么时候应该在代码中实施限制? 对于大型项目,通常最好使用 Cloudflare Rate Limiting 或 HAProxy 等工具。这些功能强大、可靠,可以为您处理繁重的工作。 但是对于较小的项目——或者如果您想了解事情是如何工作的——您可以在代码中创建自己的速率限制器。为什...
    编程 发布于2024-12-22
  • 如何有效地从Go中的切片中删除重复项?
    如何有效地从Go中的切片中删除重复项?
    从切片中删除重复项目在您的情况下,您在从切片中删除重复项目时遇到问题,因为您重新迭代切片并在迭代时删除元素。如果重复项位于切片末尾,这可能会导致索引错误和恐慌。要解决此问题,更有效的方法是将唯一元素复制到切片的开头,然后修剪之后任何多余的元素。具体方法如下:i := 0 for _, v := ra...
    编程 发布于2024-12-22
  • 如何从 HTML `` 元素获取完整文件路径?
    如何从 HTML `` 元素获取完整文件路径?
    从输入中检索完整文件路径问题:如何获取使用 选择文件时的完整文件路径element?答案:出于安全考虑,包括 Firefox 和 Chrome 在内的浏览器限制 JavaScript 访问文件系统。这意味着浏览器仅提供文件名,而不提供完整的文件路径。HTML5 文件 API 仅在 Firefox ...
    编程 发布于2024-12-22
  • 如何使用 PHP 检查 Apache 和 IIS 中是否启用了 mod_rewrite?
    如何使用 PHP 检查 Apache 和 IIS 中是否启用了 mod_rewrite?
    确定 Apache 和 IIS 的 PHP 中的 Mod_Rewrite 状态验证 mod_rewrite 的存在(URL 重写的重要组件)对于以下情况至关重要:基于 PHP 的 Web 应用程序。本文探讨了使用 PHP 在 Apache 和 IIS 环境中检查 mod_rewrite 启用情况的方...
    编程 发布于2024-12-22
  • 如何从 Spring Data JPA GROUP BY 查询返回自定义对象?
    如何从 Spring Data JPA GROUP BY 查询返回自定义对象?
    Spring Data JPA GROUP BY 查询中的自定义对象返回简介检索将数据作为来自 Spring Data JPA GROUP BY 查询的自定义对象增强了数据表示并简化了进一步处理。本指南探讨了如何实现这一目标,展示了 JPQL 和本机查询的解决方案。JPQL 查询JPA 规范中的 J...
    编程 发布于2024-12-22
  • 如何在Java中高效地填充字符串?
    如何在Java中高效地填充字符串?
    Java 中无缝填充字符串问题:Java 缺乏字符串的显式实用程序填充。如何才能有效地完成这个任务呢?答案:Java 5中引入的String.format()为填充字符串提供了全面的解决方案:左填充:public static String padLeft(String s, int n) { ...
    编程 发布于2024-12-22
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-22
  • Tailwind v 中令人兴奋的更新
    Tailwind v 中令人兴奋的更新
    几个月前(撰写本文时),Tailwind CSS 开源了其在 Tailwind CSS v4.0 上的工作。 (您可以在 GitHub 上找到它)。 最近,Tailwind 宣布了 Tailwind CSS 4 的公开 beta,在本文中我将介绍新版本的亮点。那么让我们开始吧! 一般...
    编程 发布于2024-12-22
  • 为什么我的 JavaScript 模板文字不工作?
    为什么我的 JavaScript 模板文字不工作?
    JavaScript 模板文字不起作用当尝试使用 JavaScript 模板文字(例如 some ${string} 或“some ${string}”)时,用户可能会遇到问题其中显示文字变量名称而不是它们的值。这个问题并不限于特定的浏览器版本或像 jQuery 这样的开发框架。解决方案:使用反引号...
    编程 发布于2024-12-22
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-22
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-22
  • Python 3 中的字符串到字节:“bytes()”或“.encode()”——哪个更 Pythonic?
    Python 3 中的字符串到字节:“bytes()”或“.encode()”——哪个更 Pythonic?
    Python中从字符串转换为字节3:哪种方法更Pythonic?处理二进制数据时,需要将字符串转换为字节以进行高效操作。 Python 3 为该任务提供了两种主要方法:b = bytes(mystring, 'utf-8') b = mystring.encode('utf-8')方法选择:根据Py...
    编程 发布于2024-12-22
  • Go time.Time:`time.Nil` 和 `time.IsZero()` 有什么区别?
    Go time.Time:`time.Nil` 和 `time.IsZero()` 有什么区别?
    Go 中 time.Nil 和 time.IsZero() 的区别理解 time 的零值。Go 中的 Time 至关重要当使用日期和时间时。在错误处理中,尝试为 time.Time 返回 nil 会导致类型不匹配错误。time.Time 的零值与 Go 中的其他类型不同,其中 nil代表零值,tim...
    编程 发布于2024-12-22
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-22
  • 如何防止文本中连字符后出现换行符?
    如何防止文本中连字符后出现换行符?
    防止连字符后换行处理包含连字符的文本时,您可能会遇到连字符后出现换行的问题,造成不良的视觉效果。在处理连字符测量值或其他应作为一个单词放在一起的元素时,此问题尤其明显。在 Safari 等浏览器中,由于无法识别零宽度无中断字符,可能会出现此问题() 防止换行时。为了解决这种情况,跨浏...
    编程 发布于2024-12-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3