2012-02-13 260 views
74

我试图从,同时修改了一些旧代码回来,得到以下样的错误:访问限制:不可访问,由于所需的库限制.. JRE LIB rt.jar的

访问限制:该方法从类型头创建(JAXBRIContext,对象)是不可访问,由于所需的库限制.. \ JRE \ LIB \ rt.jar的

这些import语句:

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; 

一直在寻找这可能意味着什么以及如何解决这个问题,但是不能o找到明确的答案。有些帖子似乎暗示我已经包含了一些JAR,这些JAR实现了现在作为Java核心发行版的一部分提供的类,但是据我所见,没有一个包含的JAR包含上述类的不同/旧版本。

任何人都可以告诉我这个错误是什么,以及如何解决这个问题?

感谢您的帮助已经提前,

奥利

+0

可能重复[由于限制所需的库rt.jar对类的访问限制](http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction -on-required-library-rt-jar) – 2014-11-15 23:36:19

回答

41

并不是真正的解决办法,但我到处看了解决方案建议是简单地告诉Eclipse,这些都没有错误。您可以通过转至属性 - > Java编译器 - >错误警告 - >弃用和重新分类的API - >禁止引用(访问规则),将其从错误更改为警告或忽略来更改它。

+0

这也工作!最简单的事情似乎是要么这样做,要么按照@Abimbola的建议添加/删除。 – bcmoney 2013-06-19 15:23:52

+0

好的解决方案很好地为我工作... – 2013-08-18 07:46:01

+0

为我工作,但我不得不想,为什么警告是在那里摆在首位。 – mister270 2014-07-10 16:59:57

124

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

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

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

添加此访问规则后,您的项目应该没有这些警告生成。

+0

谢谢。真的帮助了我。 – Pushkar 2012-11-21 08:43:27

+1

嗯,奇怪没有为我工作,但这是在RAD 8不是Eclipse ...当然下面的工作,虽然,莫名其妙地(只是添加/删除JRE) – bcmoney 2013-06-19 15:22:02

+2

+1添加特定访问规则 - 而不是禁用所有警告。你摇滚! – rjha94 2013-07-16 14:55:20

77

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

请参见下面的总结:在项目属性

  1. 转到Build路径设置。
  2. 删除JRE系统库
  3. 将其添加回去;选择“添加库”并选择JRE系统库。默认为我工作。
+3

我不知道为什么,但这有帮助... – Alex 2013-08-26 15:12:42

+0

从旧的jdk更新后为我工作。 – 2014-01-13 00:25:38

+0

谢谢!在Eclipse Kepler上为我工作。将Jetty 9发行版中的servlet-api-3.1.jar包含到我的项目中显然会导致问题。或者也许是运行jetty运行插件。哦,只要它的工作。 – faizal 2014-05-12 16:19:26

-2

转到构建路径

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

我认为这种方式可以解决您的错误

5

我的插件取决于另一个项目,它在其清单文件中导出了一些包时,我遇到了同样的问题。通过在Export-Package部分添加所需的软件包,我设法解决了这个问题,而不是改变访问规则。这使得包裹合法可见。 Eclipse实际上在“访问限制”错误标记上提供了此修复。

0

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

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

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

15

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

+0

是的,但我不明白为什么? – PeerNet 2015-08-14 11:20:55

+0

顺便说一下,每当你做Maven的时候,它都会得到重置Maven>在你使用Maven的情况下更新并且你没有设置:' 1.8 < maven.compiler.target> 1.8 '例如 – ACV 2015-09-22 08:07:23

+0

@ACV您对maven的解决方案不适合我... – 2017-09-21 15:34:04

0

我刚刚将项目方面改为1.7,它工作。

8

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

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

错误将被删除。

1

在Eclipse环境中,你执行你的Java程序,采取以下步骤:

  1. 点击项目刚刚在eclipse菜单栏上方。
  2. 点击属性。
  3. 选择库,单击现有库并单击窗口右侧的删除。
  4. 重复此过程,然后单击添加库,然后选择JRE系统库并单击确定。