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

我试图编译IBMWSDL2JavaJava5上创建的Java1.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

这里到底发生了什么?这是一个我试图从香肠中重构猪的案例吗?我最好重新创建存根吗?

669294 次浏览

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

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

我以前在QName中见过这种情况,我通过从我拥有的jar中删除类来“修复”它。

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

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

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

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

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

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

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

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

还有一个解决方案也有效。

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

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

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

  • 转到项目属性中的构建路径设置。Windows -> Preferences -> Java Compiler
  • 删除JRE系统库
  • 添加另一个带有“完美匹配”的JRE
  • 清理并重新构建您的项目。它对我有用。

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

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

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

a.b.c.d1a.b.c.d2

但也是一个仅实现的旧版本:

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

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

解决方案是检查编译时库的顺序,并确保具有正确实现的库先行。

很抱歉更新了一个旧的帖子。我得到了报告的问题,我解决了它,如下所述。

假设您使用的是Eclipse+m2e maven插件,如果您收到此访问限制错误,请右键单击出现错误的项目/模块-->Properties-->Build Path-->Library-->Replace JDK/JRE到eclipse工作区中使用的那个。

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

我也遇到了这个错误,但我的项目是使用Maven和第谷编译器在命令行上构建的(它是一组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的时间来解决,所以我想我会通过发布这个答案来帮助任何试图从命令行修复这些访问限制错误的人。

在我的例子中,构建路径JRE和执行环境上安装的JRE不匹配。我进入项目>属性>Java编译器。底部有一条警告消息。

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

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

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

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

玩这些转盘,以及在两者之间运行项目>清洁,我能够解决这些警告。

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

转到项目属性中的JavaBuild Path。删除现有的JRE系统库然后再次添加它,即添加库-->JRE Lib--选择jre--->完成。最后选择订单和出口选项卡选择JRE Lib并移动到顶部。就是这样。

对我来说,我是这样解决的:

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

在图书馆

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

在此处输入图片描述

注意:确保在Eclipse/首选项(不是项目)/Java/安装JRE中,jdk指向JDK文件夹而不是JREC:\Program Files\Java\jdk1.80_74

在此处输入图片描述

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