ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试修改一些遗留代码并得到以下类型的错误:

访问限制:由于对所需库 ..\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 中没有一个包含上述类的不同/旧版本。

任何人都可以告诉我这个错误是怎么回事以及我该如何解决这个问题?

提前感谢您的帮助,

奥利


J
Jonny Henly

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

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

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

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


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

出色的答案已在现场提供here

请参阅下面的摘要:

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


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

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


这也有效!最简单的事情似乎是按照@Abimbola 的建议执行此操作或添加/删除。
也为我工作,但我不得不想知道为什么首先会出现警告。
C
Candra

我已经通过以下步骤解决了这个问题:展开您的项目,右键单击“JRE System Library”>“属性”>选择第三个选项“Workspace default JRE”>“OK”。希望对你也有帮助


顺便说一句,每次执行 Maven 时都会重置它>如果您使用 Maven 并且未设置,请更新:例如 <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
S
Sebastian Brosch

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

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

错误将被删除。


V
Val

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


r
rfornal

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

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


L
Lucas

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

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

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


M
Magno C

我刚刚将项目方面更改为 1.7 并且它有效。


D
DevArea

转到构建路径

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

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