由于对所需库rt.jar的限制而对类进行访问限制?
我试图在Java5上编译由IBM的WSDL2Java创build的Java 1.4代码,而不重新创build存根,并在Eclipse中看到这个错误。 我假设存根创build应该只要运行时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
这到底是怎么回事?
这是我试图从香肠重构猪的情况吗? 我最好重新创build存根吗?
还有另一个解决scheme也可以。 我在这个论坛上发现它:
- 转到项目属性中的“ 生成path”设置。
- 删除JRE系统库
- 加回来; select“添加库”并selectJRE系统库 。 默认为我工作。
这是有效的,因为你在不同的jar文件中有多个类。 删除并重新添加JRE库将使正确的类成为第一个。 如果您想要一个基本的解决scheme,请确保您排除具有相同类的jar文件。
对于我来说: javax.xml.soap.SOAPPart
在三个不同的jar包中: axis-saaj-1.4.jar
, saaj-api-1.3.jar
和rt.jar
http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html最适合我。;
在Windows上: Windows – >首选项 – > Java – >编译器 – >错误/警告 – >弃用和受限API – >禁止引用(访问规则): – >更改为警告
在Mac OS X / Linux上: Eclipse – >首选项 – > Java – >编译器 – >错误/警告 – >弃用和受限API – >禁止引用(访问规则): – >更改为警告
我遇到了同样的问题。 我在网站上find了答案: http : //www.17ext.com 。
首先,删除JRE系统库。 然后,再次导入JRE系统库。
我不知道为什么,但它解决了我的问题,希望它能帮助你。
我的猜测是,你正试图用一个库中的一个replace一个Java 5附带的标准类。
根据许可协议的条款,这是不允许的,但是AFAIK在Java 5之前没有执行。
我之前已经看到过这个QName,并且通过从我拥有的jar中移除了这个类来“修复”它。
编辑http://www.manpagez.com/man/1/java/注意选项“-Xbootclasspath:”;
“使用此选项来覆盖rt.jar中的类的应用程序不应被部署,因为这样做会违反Java 2 Runtime Environment二进制代码许可证。”
http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE
“Java技术限制:不能通过在JPI中创build额外的类来修改Java平台接口(”JPI“,被标识为包含在”java“包中的类或”java“包的任何子包)如果您创build了一个额外的类和相关的API,这些API(i)扩展了Java平台的function,并且(ii)暴露给第三方软件开发人员开发额外的软件来调用这些额外的API的目的,你必须及时地发布一个准确的规范,以供所有开发人员免费使用,你不能创build,或授权你的许可证创build额外的类,接口或子包以任何方式被标识为“java”,“javax”,“sun”或Sun在任何命名约定名称中指定的类似约定。
我也得到这个错误,但我的项目是build立在使用Maven和tycho编译器(这是一组OSGi插件)的命令行上。 在大量的人们都遇到了同样的问题,但是在Eclipse中而不是在命令行中修复之后,我在Tycho的开发者论坛上发现了一个消息来回答我的问题,使用pom.xml
configuration来忽略编译器的访问警告限制:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-compiler-plugin</artifactId> <version>${tycho.version}</version> <configuration> <compilerArgument>-warn:+discouraged,forbidden</compilerArgument> </configuration> </plugin>
更多信息可以在第谷常见问题解答中find。 这使我AGES解决,所以我想我会帮助其他人试图通过发布这个答案来解决这些来自命令行的访问限制错误。
- 转到项目属性中的“生成path”设置。
Windows -> Preferences -> Java Compiler
- 删除JRE系统库
- 添加另一个与“完美匹配”的JRE
- 清理并再次构build您的项目。 它为我工作。
我也有这个问题。 显然我已经把JRE设置为1.5,而不是1.6。
除了Nels Beckman的解决scheme ,我还有以下提示:
在“ configuration构buildpath”下 ,我必须重新排列“ 订单和导出”下的条目顺序 。
另外,作为Eclipse PDE开发人员,我需要在MANIFEST.MF
重新排列依赖关系的顺序,将有问题的程序包添加为列表中的第一个。
使用这些拨号盘,以及运行项目之间>清理之间,我能够解决这些警告。
对不起,更新旧的POST。 我得到了报告的问题,我解决了它,如下所述。
假设你正在使用Eclipse + m2e maven插件,如果你得到这个访问限制错误,右键单击你有错误的项目/模块 – >属性 – >生成path – >库 – >replaceJDK / JRE到eclipse工作区中使用的JRE。
我遵循上述步骤,问题得到解决。
如果你确定你应该能够访问给定的类,比这可能意味着你添加了几个jar子到你的项目包含具有相同的名称(或path),但内容不同的类,他们掩盖了对方(通常是一个旧的习惯构buildjar包含第三方库的内置旧版本)。
例如,当你添加一个jar实现:
abcd1 abcd2
但也是一个旧版本只执行:
abcd1 (d2 is missing altogether or has restricted access)
在代码编辑器中,一切工作正常,但在编译期间,如果“旧”库遮盖了新的库,则会失败 – 即使是在那里,d2突然显示“丢失或无法访问”。
解决方法是检查编译时库的顺序,并确保正确执行的那个先执行。
转至项目属性中的Java Build Path。 删除现有的JRE系统库,然后再次添加,即添加库 – > JRE Lib – selectjre —>完成。 最后select订单和导出标签,selectJRE Lib,然后移动到最上面。 而已。
只需更改项目的构buildpath库的顺序即可。 右键单击项目>构buildpath>configuration构buildpath>select顺序和导出(选项卡)>更改条目的顺序。 我希望把“JRE系统库”移到底部工作。 它为我工作。 简单而简单….
在我的情况下,构buildpathJRE和执行环境中安装的JRE之间存在不匹配。 我进入了Project> Properties> Java编译器。 底部有一个警告信息。
我点击链接的“已安装的JRE”,“执行环境”,“Java构buildpath”,并将JDK版本更改为1.7,警告消失。
对我来说,我是如何解决它的:
- 转到当前项目的构buildpath
在图书馆
- select“ JRE系统库 [jdk1.8xxx]”
- 点击编辑
- 并select“工作区默认JRE(jdk1.8xx)” 或“备用JRE”
- 点击完成
- 点击OK
注意:确保在Eclipse / Preferences(不是项目)/ Java / Installed JRE中,jdk指向JDK文件夹而不是JRE C:\ Program Files \ Java \ jdk1.8.0_74
通过构buildpath添加一个正确的JRE系统是解决scheme,但是你的eclipse仍然可能有错误。 要解决这个问题,请转到Java Build path – > Order and Export,然后将JRE系统库移到顶部。 这已经解决了我的问题。