【问题标题】:JDK 10 cannot import javax.xml.namespace in EclipseJDK 10 无法在 Eclipse 中导入 javax.xml.namespace
【发布时间】:2018-10-09 10:44:18
【问题描述】:

这很奇怪。我正在将一个动态 Web 项目从 Java 8 迁移到 Java 10。

我无法解决依赖关系的最后一件事是 javax.xml.namespace.QName 类。

您可以在附加的屏幕截图中看到,JRE 系统库中存在 QName 类,但 IDE 一直抱怨 QName 无法解析为类型。

【问题讨论】:

  • 为什么要迁移到 Java 10 而不是 Java 11:Java 10 已经 EOL。根据屏幕截图,您还没有从 javax.xml.namespace 包中导入东西:首先这样做。在任何情况下,发布minimal reproducible example,并指定您是否也在模块化,因为 javax.xml.* 包在模块 java.xml 中。
  • 我不理解您的担忧。在您的屏幕截图中,建议的第一个快速修复是:Import 'QName' (java.xml.namespace)。如果您选择快速修复,那么您的问题是否已解决?还是您确实选择了该快速修复但QName 仍未解决的问题?无论哪种方式,请更新您的帖子以明确说明在您选择该快速修复以导入 QName 后会发生什么。就目前而言,您的问题在这一点上尚不清楚。
  • 感谢评论,很抱歉截图不清楚。实际上,如果我选择快速修复并导入类,编译器仍然抱怨类 QName 不可解析
  • 我也有同样的问题......我的 pom 有它,Eclipse 看到它,甚至可以用 ctrl-space 找到它,但它抱怨它无法解析为完全相同的类型

标签: java eclipse java-10 javax.xml


【解决方案1】:

可能存在从其他依赖项中提取的重复依赖项。

在eclipse中做

  1. “导航 -> 打开类型...
  2. 输入“java.xml.namespace”。
  3. 如果有来自 (Open-)JDK 之外的其他结果,则需要在以下步骤中删除这些结果。就我而言,它是 xml-apis
  4. 在 Eclipse 中打开您的 pom.xml,并访问“Dependency Hierarchy”选项卡以检查哪个依赖项拉入了 xml-apis
  5. 在过滤器中键入“xml-apis”。就我而言,拉动 xml-apis 的顶级依赖项是“esapi”
  6. 从 esapi 依赖项中排除 xml-apis:

    <dependency>
        <groupId>org.owasp.esapi</groupId>
        <artifactId>esapi</artifactId>
        <version>2.2.0.0</version>
    
        <exclusions>
            <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
            </exclusion>
        </exclusions>
    
    </dependency>
    
  7. 右键单击您的项目并选择“Maven -> 更新项目...”。检查您的项目并点击确定。

就是这样

【讨论】:

    【解决方案2】:

    我从 Java 8 迁移到 Java 11 时遇到了同样的错误, 我包含了对库 stax-api 1.0-2 的显式依赖:

    <dependency>
      <groupId>javax.xml.stream</groupId>
      <artifactId>stax-api</artifactId>
      <version>1.0-2</version>
    </dependency>
    

    并排除对库 stax-api 1.0.1 的任何过渡依赖:

        ...
        <exclusion>
          <groupId>stax</groupId>
          <artifactId>stax-api</artifactId>
        </exclusion>
        ...
    

    在此之后,我的 IDE 正确找到了丢失的导入 javax.xml.namespace.QName。

    我希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      尝试更改类路径中元素的顺序。 JRE 必须在 Maven 依赖项之前。这解决了问题。

      我的猜测是 Java 10 编译器注意到您正在尝试用 JAR 中的代码替换内部类 (java.xml.namespace),但它不喜欢这样。

      【讨论】:

        【解决方案4】:

        通过从项目类路径(项目 -> 属性 -> java 构建路径 -> 库 -> 类路径)中删除 jsr173_api.jar 来解决它。 eclipse项目重建时再次出现。

        【讨论】:

          【解决方案5】:

          这行得通!检查多种类型 Ctrl+Shift+T,删除不需要的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-12
            • 1970-01-01
            • 2011-12-16
            • 2015-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多