访问限制:由于对所需库 ..\jre\lib\rt.jar 的限制,无法访问

Posted

技术标签:

【中文标题】访问限制:由于对所需库 ..\\jre\\lib\\rt.jar 的限制,无法访问【英文标题】:Access restriction: Is not accessible due to restriction on required library ..\jre\lib\rt.jar访问限制:由于对所需库 ..\jre\lib\rt.jar 的限制,无法访问 【发布时间】:2012-03-05 05:10:31 【问题描述】:

我正在尝试修改一些旧代码,但出现以下错误:

访问限制:由于所需库..\jre\lib\rt.jar 的限制,无法访问类型Headers 中的方法create(JAXBRIContext, Object)

对于这些导入语句:

import com.sun.xml.internal.bind.api.JAXBRIContext;
import com.sun.xml.internal.ws.api.message.Header;
import com.sun.xml.internal.ws.api.message.Headers;
import com.sun.xml.internal.ws.developer.WSBindingProvider;

一直在寻找这可能意味着什么以及如何解决它,但无法找到明确的答案。有些帖子似乎表明我包含了一些 JAR,它们实现了现在作为核心 Java 发行版的一部分可用的类,但据我所知,我所包含的 JAR 中没有一个包含上述类的不同/旧版本。

谁能告诉我这个错误是怎么回事以及如何解决这个问题?

提前感谢您的帮助,

奥利

【问题讨论】:

Access restriction on class due to restriction on required library rt.jar? 的可能重复项 【参考方案1】:

我遇到了类似的情况,我认为警告的原因是 Eclipse 试图阻止您使用作为工作区 JRE 的一部分安装但不属于公共 Java API 的内部 com.sun 包.

正如贾斯汀在他的回答中所说,更改编译器设置可以隐藏警告。更细粒度的方法是修改构建路径以明确允许访问相关包:

    打开 Java 构建路径项目属性窗口的库选项卡。 展开 JRE 系统库条目。 选择“访问规则”并点击“编辑”按钮。 在出现的对话框中单击“添加”按钮。 对于新的访问规则,将分辨率设置为可访问,将模式设置为"com/sun/xml/internal/**"

添加此访问规则后,您的项目应该在没有这些警告的情况下构建。

【讨论】:

嗯,奇怪的对我不起作用,但那是在 RAD 8 中而不是 Eclipse... 下面的一个当然可以工作,但莫名其妙(只需添加/删除 JRE) +1 用于添加特定的访问规则 - 而不是禁用所有警告。你摇滚! 我是另一个满意的客户。谢谢你! 可以保存这个设置吗? @Hervian 这就是警告的重点——这些课程随时可能发生变化。如果可能的话,您应该避免使用这些内部类,转而使用公共 API。也就是说,它们中的许多都是 OpenJDK 的一部分,并且多年来一直没有改变,所以......这是你的判断。【参考方案2】:

优秀的答案已经提供现场here。

请参阅下面的摘要:

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

【讨论】:

从较旧的 jdk 更新后为我工作。 谢谢!在 Eclipse Kepler 上为我工作。将 Jetty 9 发行版中的 servlet-api-3.1.jar 包含到我的项目中显然会导致问题。或者也许它是 run jetty run 插件。哦,好吧,只要它有效.. @AdityaSingh 这很有效,因为您在不同的 jar 文件中有多个类。删除和重新添加 JRE 库将使正确的类成为第一。如果您想要一个基本解决方案,请确保排除具有相同类的 jar 文件。请参考this问题的已接受答案。【参考方案3】:

不是一个真正的解决方案,但我所看到的解决方案建议只是简单地告诉 Eclipse 这些不是错误。您可以通过转到 Properties --> Java Compiler --> Errors Warnings --> Deprecated and restrited APIs --> Forbidden reference (access rule),将其从 Error 更改为 Warning 或 Ignore 来更改它。

【讨论】:

这也有效!最简单的事情似乎是要么这样做,要么按照@Abimbola 的建议添加/删除。 也为我工作,但我不得不想知道为什么首先出现警告。【参考方案4】:

我已经通过以下步骤解决了这个问题:展开您的项目,右键单击“JRE 系统库”>“属性”> 选择第三个选项“工作区默认 JRE”>“确定”。希望对你也有帮助

【讨论】:

顺便说一句,每次执行 Maven 时都会重置 > 更新以防您使用 Maven 并且未设置:例如 <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>【参考方案5】:

在 Eclipse 中:Project -> properties -> java Build Path -> libraries

删除现有的 JRE 系统库,然后 Add Library -> JRE System library -> next -> ok

错误将被删除。

【讨论】:

【参考方案6】:

当我的插件依赖于另一个项目时,我遇到了同样的问题,该项目在其清单文件中导出了一些包。我没有更改访问规则,而是通过将所需的包添加到其导出包部分来解决问题。这使得包裹合法可见。 Eclipse 实际上在“访问限制”错误标记上提供了这个修复。

【讨论】:

【参考方案7】:

在你执行java程序的eclipse环境中,执行以下步骤:

    单击 Eclipse 中菜单栏上方的 Project。 单击属性。 选择库,单击现有库,然后单击窗口右侧的删除。 重复该过程,现在单击添加库,然后选择 JRE 系统库并单击确定。

【讨论】:

【参考方案8】:

我之所以回答这个问题,是因为我解决此问题的方法与其他答案不同。当我重构要导出的插件的名称时,我遇到了这个问题。最终我必须确保修复/更改以下内容。

    产品文件的依赖关系, plugin.xml 依赖项(并确保它不是使用导入的包对话框隐式导入的)。 运行配置插件选项卡。运行方式..->运行配置->插件选项卡。取消选中旧插件,然后点击添加所需插件。

这对我有用,但你的里程可能会有所不同。

【讨论】:

【参考方案9】:

我刚刚将项目方面更改为 1.7 并且它工作正常。

【讨论】:

【参考方案10】:

转到构建路径

删除现有的 JRE 并添加包含 Jdk1.6 的新 JRE 库 并完成 现在清理所有项目并重新构建

我认为这样可以解决你的错误

【讨论】:

以上是关于访问限制:由于对所需库 ..\jre\lib\rt.jar 的限制,无法访问的主要内容,如果未能解决你的问题,请参考以下文章

由于对所需库的限制,JFrame 受到限制 [重复]

错误:访问限制:“数据源”类型不是 API(对所需库的限制 ..\rt.jar)[重复]

访问限制:“应用程序”类型不是 API(对所需库 rt.jar 的限制)

访问限制:由于所需库 /opt/java/ 的限制,无法访问类型 JFrame

导入包但出现访问限制类型错误

“受限库”在 Java 中的真正含义是啥?