由于对所需库 rt.jar 的限制而导致对类的访问限制?

我试图在不重新创建存根的情况下编译由 IBM 的 WSDL2Java 在 Java5 上创建的 Java 1.4 代码,并在 Eclipse 中看到此错误。我的假设是,只要运行时 jar 可用(它们存在),生成的存根就应该编译。

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

这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗?

答案

还有另一个解决方案,也可以。

  1. 转到项目属性中的 “ 构建路径”设置。
  2. 删除JRE 系统库
  3. 加回去;选择“添加库”,然后选择JRE 系统库 。默认为我工作。

之所以可行,是因为您在不同的 jar 文件中有多个类。删除并重新添加 JRE 库将使正确的类成为第一位。如果需要基本解决方案,请确保排除具有相同类的 jar 文件。

对我来说,我有: javax.xml.soap.SOAPPart位于三个不同的 jar 中: axis-saaj-1.4.jarsaaj-api-1.3.jarrt.jar

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

在 Windows 上: Windows-> 首选项 -> Java-> 编译器 -> 错误 / 警告 -> 不推荐使用和受限制的 API-> 禁止引用(访问规则):-> 更改为警告

在 Mac OS X / Linux 上: Eclipse-> 首选项 -> Java-> 编译器 -> 错误 / 警告 -> 不推荐使用和受限制的 API-> 禁止引用(访问规则):-> 更改为警告

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

我不知道为什么。但是它解决了我的问题,希望它可以为您提供帮助。

我的猜测是,您试图用您库中的一个替换 Java 5 附带的标准类。

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

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

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

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

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

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

我也一直遇到这个错误,但是我的项目是使用 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>

可以在Tycho FAQ 中找到更多信息。这花了我 AGES 的时间来解决,因此我想我可以通过发布此答案来帮助其他尝试从命令行修复这些访问限制错误的人。

  • 转到项目属性中的 “构建路径” 设置。 Windows -> Preferences -> Java Compiler
  • 删除 JRE 系统库
  • 添加另一个具有 “完全匹配” 的 JRE
  • 清理并再次构建您的项目。它为我工作。

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

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

在 “ 配置构建路径” 下 ,我必须重新排列 “ 订单和导出”下条目的顺序

另外,作为 Eclipse PDE 开发人员,我需要在MANIFEST.MF重新排列依存关系的顺序,将有问题的软件包添加为列表中的第一个。

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

对我来说,这是我的解决方法:

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

在图书馆下

  • 选择 “ JRE 系统库 [jdk1.8xxx]”
  • 点击编辑
  • 并选择 “工作区默认 JRE(jdk1.8xx)” 备用 JRE
  • 点击完成
  • 点击确定

在此处输入图片说明

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

在此处输入图片说明

抱歉,更新旧的 POST。我收到了报告的问题,并按以下说明解决了问题。

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

我按照上述步骤操作,问题已解决。