JDK 10在Eclipse中无法导入javax.xml.namespace。

11

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

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

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


3
为什么你要迁移到Java 10而不是Java 11:Java 10已经到了EOL。根据屏幕截图,你还没有导入javax.xml.namespace包中的内容:请先完成该步骤。无论如何,请发布一个[mcve],并指定是否进行模块化,因为javax.xml.*包在java.xml模块中。 - Mark Rotteveel
我不理解你的问题。在你的截图中,第一个快速修复建议是:_导入'QName'(java.xml.namespace)_。如果您选择了该快速修复,那么您的问题是否已解决?还是问题在于您确实选择了该快速修复,但QName仍未解决?无论哪种情况,请更新您的帖子以明确说明在选择导入QName的快速修复后发生了什么。就目前而言,您的问题在这一点上不清楚。 - skomisa
感谢您的评论,很抱歉截图不够清晰。实际上,如果我选择快速修复并导入类,编译器仍然会抱怨类QName无法解析。 - Ivan
我也遇到了同样的问题...我的pom文件里有它,Eclipse也能看到并且在按下ctrl-space时甚至能找到它,但是它仍然抱怨无法解析为类型。 - chrislhardin
6个回答

17

可能存在一个重复的依赖项,是从其他某个依赖项中引入的。

在Eclipse中执行以下操作:

  1. 导航到“打开类型...
  2. 输入“java.xml.namespace”
  3. 如果有其他结果不是来自您的(开放式-)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->更新项目..."。检查您的项目,然后单击确定。

就这样


8

我在从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成功找到了丢失的import javax.xml.namespace.QName。
希望这能帮到您。

6
尝试更改类路径上元素的顺序。JRE必须在Maven依赖项之前。这样可以解决问题。
我猜测Java 10编译器注意到您正在尝试使用JAR中的代码替换内部类(java.xml.namespace),它不喜欢这样做。

1

我在使用JRE 11和Gradle 7.5时也遇到了同样的问题。如果有帮助的话,你可以将xml-apis排除在外:

configurations {
    all {
        exclude group: 'xml-apis', module: 'xml-apis'
    }
}

0
通过从项目类路径中删除jsr173_api.jar(项目->属性->Java构建路径->库->类路径)来解决它。当Eclipse项目重新构建时,它会再次出现。

0

这个可行!检查多种类型 Ctrl+Shift+T,移除不需要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接