831

我正在尝试编译由IBM 的WSDL2JavaJava5上创建的Java 1.4代码,而无需重新创建存根,并在Eclipse中看到了这个错误。 我假设只要运行时可用(它们是),生成的存根就应该编译。
jars

Access restriction: The type QName is not accessible due to restriction on required library C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar

完整的类名是javax.xml.namespace.QName

这里到底发生了什么?这是我试图用香肠重构猪的情况吗?我最好重新创建存根吗?

4

15 回答 15

1901

还有另一种解决方案也有效。

  1. 转到项目属性中的构建路径设置。
  2. 删除JRE 系统库
  3. 加回来;选择“添加库”并选择JRE System Library。默认值对我有用。

这是有效的,因为您在不同的 jar 文件中有多个类。删除和重新添加 JRE 库将使正确的类成为第一。如果您想要一个基本解决方案,请确保排除具有相同类的 jar 文件。

对我来说,我有:javax.xml.soap.SOAPPart在三个不同的罐子里axis-saaj-1.4.jarsaaj-api-1.3.jarrt.jar

于 2010-02-01T04:09:13.440 回答
127

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html最适合我。

在 Windows 上: Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning

在 Mac OS X/Linux 上: Eclipse -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning

于 2010-01-16T03:21:17.613 回答
69

我遇到了同样的问题。我在网站上找到了答案:http ://www.17ext.com 。
首先,删除 JRE 系统库。然后,再次导入 JRE 系统库。

于 2009-11-23T05:55:30.410 回答
35

我的猜测是您正在尝试用您拥有的库中的一个替换 Java 5 附带的标准类。

根据许可协议的条款,这是不允许的,但是 AFAIK 直到 Java 5 才强制执行。

我以前用 QName 看到过这个,我通过从我拥有的 jar 中删除类来“修复”它。

编辑 http://www.manpagez.com/man/1/java/选项“-Xbootclasspath:”的注释

“不应部署使用此选项来覆盖 rt.jar 中的类的应用程序,因为这样做会违反 Java 2 运行时环境二进制代码许可证。”

http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE _

“Java 技术限制。您不得通过在 JPI 中创建其他类或以其他方式导致添加或修改 JPI 中的类。如果您创建附加类和相关 API,它们 (i) 扩展了 Java 平台的功能,并且 (ii) 向第三方软件开发人员公开为了开发调用此类附加 API 的附加软件的目的,您必须立即广泛发布此类 API 的准确规范,供所有开发人员免费使用。您不得创建或授权您的被许可人创建附加类、接口、或以任何方式标识为“java”、“javax”、“sun”或 Sun 在任何命名约定指定中指定的类似约定的子包。

于 2009-05-13T20:30:04.443 回答
27

我也遇到了这个错误,但是我的项目是使用 Maven 和tycho编译器(它是一组 OSGi 插件)在命令行上构建的。在大量筛选有相同问题但在 Eclipse 中而不是在命令行中修复它的人之后,我在 Tycho 开发者论坛上找到了一条消息,它回答了我的问题,使用配置pom.xml忽略编译器关于访问限制的警告:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-compiler-plugin</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
    </configuration>
</plugin>

更多信息可以在第谷常见问题解答中找到。这花了我 AGES 的时间来解决,所以我想我会通过发布这个答案来帮助其他任何人试图从命令行修复这些访问限制错误。

于 2013-09-06T12:31:50.403 回答
14
  • 转到项目属性中的构建路径设置。 Windows -> Preferences -> Java Compiler
  • 删除 JRE 系统库
  • 添加另一个具有“完美匹配”的 JRE
  • 清理并再次构建您的项目。它对我有用。
于 2010-03-31T19:09:48.893 回答
13

我也刚遇到这个问题。显然我在构建路径中将 JRE 设置为 1.5 而不是 1.6。

于 2011-07-01T09:46:10.380 回答
9

除了Nels Beckman 的解决方案,我还有以下提示:

Configure Build Path下,我不得不重新排列Order 和 Export下的条目顺序。

此外,作为一名 Eclipse PDE 开发人员,我需要重新排列我的依赖项的顺序MANIFEST.MF,将有问题的包添加为列表中的第一个。

使用这些刻度盘,以及在两者之间运行Project > Clean,我能够解决这些警告。

于 2014-06-01T03:41:08.300 回答
9

对我来说这是我如何解决它:

  • 转到当前项目的构建路径

在图书馆下

  • 选择“ JRE 系统库[jdk1.8xxx]”
  • 点击编辑
  • 并选择“Workspace default JRE(jdk1.8xx)”Alternate JRE
  • 点击完成
  • 点击确定

在此处输入图像描述

注意:确保在 Eclipse / Preferences (NOT the project) / Java / Installed JRE 中,jdk 指向 JDK 文件夹而不是 JRE C:\Program Files\Java\jdk1.8.0_74

在此处输入图像描述

于 2016-03-20T18:40:23.090 回答
6

抱歉更新旧帖子。我收到了报告的问题,并按如下所述解决了它。

假设您使用的是 Eclipse + m2e maven 插件,如果遇到此访问限制错误,请右键单击出现错误的项目/模块 --> 属性 --> 构建路径 --> 库 --> 替换 JDK/ JRE 到 Eclipse 工作区中使用的那个。

我按照上述步骤解决了问题。

于 2013-05-24T10:51:46.763 回答
5

如果您确定应该能够访问给定的类,这可能意味着您向项目中添加了几个 jar,其中包含具有相同名称(或路径)但内容不同的类,并且它们相互遮盖(通常是旧的自定义build jar 包含内置的旧版本的第 3 方库)。

例如,当您添加一个 jar 实现:

a.b.c.d1
a.b.c.d2

但也有一个旧版本只实现:

a.b.c.d1
(d2 is missing altogether or has restricted access)

在代码编辑器中一切正常,但如果“旧”库掩盖了新库,则在编译过程中会失败 - d2 突然变成“丢失或无法访问”,即使它在那里。

解决方案是检查编译时库的顺序,并确保具有正确实现的库排在第一位。

于 2013-04-01T15:18:17.337 回答
5

转到项目属性中的 Java 构建路径。删除现有的 JRE System Library 然后再次添加,即 Add Library-->JRE Lib--选择 jre-->Finish。最后选择order 和 export选项卡选择 JRE Lib 并移到顶部。就是这样。

于 2015-02-16T11:51:56.407 回答
3

在我的情况下,构建路径 JRE 和在执行环境中安装的 JRE 之间存在不匹配。我进入了项目 > 属性 > Java 编译器。底部有一条警告信息。

我单击链接“已安装 JRE”、“执行环境”、“Java 构建路径”并将 JDK 版本更改为 1.7,警告消失了。

于 2014-03-19T05:59:30.340 回答
3

只需更改项目的构建路径库的顺序即可。右键单击项目>构建路径>配置构建路径>选择顺序和导出(选项卡)>更改条目的顺序。我希望将“JRE 系统库”移到底部会起作用。它对我有用。简单易行....!!!

于 2014-07-28T16:57:05.313 回答
-1

通过构建路径添加正确的 JRE 系统是解决方案,但您的 eclipse 仍然可能有错误。要解决这个问题,请转到 Java Build path --> Order and Export 并将您的 JRE 系统库移动到顶部。这解决了我的问题。

于 2017-08-16T06:40:31.917 回答