我正在尝试编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,而无需重新创建存根并在Eclipse中看到此错误 . 我假设只要运行时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
到底发生了什么?
这是我试图用香肠重构一头猪的情况吗?我最好重新创建存根吗?
15 回答
转到项目属性中的“构建路径”设置 .
Windows -> Preferences -> Java Compiler
删除JRE系统库
使用"perfect match"添加另一个JRE
清理并再次构建您的项目 . 它对我有用 .
我遇到了同样的问题 . 我在网站上找到了答案:http://www.17ext.com .
首先,删除JRE系统库 . 然后,再次导入JRE系统库 .
我不知道为什么 . 但是它解决了我的问题,希望它可以帮到你 .
对我而言,我如何解决它:
在图书馆下
选择“ JRE System Library [jdk1.8xxx]”
点击 edit
并选择"Workspace default JRE(jdk1.8xx)" OR 备用JRE
点击完成
单击“确定”
注意:确保在Eclipse / Preferences(不是项目)/ Java / Installed JRE中,jdk指向JDK文件夹而不是JRE C:\Program Files\Java\jdk1.8.0_74
只需更改项目的构建路径库的顺序即可 . 右键单击项目>构建路径>配置构建路径>选择顺序和导出(选项卡)>更改条目的顺序 . 我希望将“JRE系统库”移到底部是可行的 . 它对我有用 . 简单...... !!!
很抱歉更新旧的POST . 我得到了报告的问题,我解决了它,如下所述 .
假设您正在使用Eclipse m2e maven插件,如果您遇到此访问限制错误,请右键单击您有错误的项目/模块 - >属性 - >构建路径 - >库 - >替换JDK / JRE到eclipse工作区中使用的那个 .
我按照上述步骤解决了问题 .
http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html对我来说效果最好 .
On Windows: Windows - >首选项 - > Java - >编译器 - >错误/警告 - >不推荐使用和限制的API - >禁止引用(访问规则): - >更改为警告
On Mac OS X/Linux: Eclipse - >首选项 - > Java - >编译器 - >错误/警告 - >不推荐使用和受限制的API - >禁止引用(访问规则): - >更改为警告
除了Nels Beckman's solution之外,我还有以下提示:
在配置构建路径下,我不得不重新排列订单和导出下的条目顺序 .
另外,作为Eclipse PDE开发人员,我需要在
MANIFEST.MF
中重新排列依赖项的顺序,在列表中首先添加有问题的包 .使用这些拨号,以及运行项目>清洁之间,我能够解决这些警告 .
我的猜测是你试图用你自己的库替换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技术限制 . 您不能修改Java平台接口(”JPI“,标识为”java“包中包含的类或”java“包的任何子包),通过在JPI中创建其他类或以其他方式导致添加或修改JPI中的类 . 如果您创建了一个额外的类和关联的API,它们(i)扩展了Java平台的功能,并且(ii)向第三方软件开发人员公开为了开发调用此类附加API的附加软件,您必须及时公布所有开发人员免费使用的API的准确规范 . 您不得创建或授权您的被许可人创建其他类,接口或子包,以任何方式标识为“java”,“javax”,“sun”或Sun在任何命名惯例中指定的类似约定 . “
我也得到了这个错误,但我的项目是使用Maven和tycho编译器(它是一组OSGi插件)在命令行上构建的 . 在大量筛选具有相同问题的人但是在Eclipse中而不是在命令行上修复它之后,我发现a message on the Tycho developer forum回答了我的问题,使用
pom.xml
中的配置来忽略编译器关于访问限制的警告:更多信息可以在Tycho FAQ中找到 . 这让我老去了解决了,所以我想通过发布这个答案,我会帮助其他试图从命令行修复这些访问限制错误的人 .
转到项目属性中的Java Build Path . 删除现有的JRE系统库然后再添加它,即添加库 - > JRE Lib - 选择jre ---> Finish . 最后选择 order and export 选项卡选择JRE Lib并移至顶部 . 而已 .
还有另一种解决方案也有效 .
转到项目属性中的“构建路径”设置 .
删除JRE系统库
加回来;选择"Add Library"并选择JRE系统库 . 默认对我有用 .
这是有效的,因为您在不同的jar文件中有多个类 . 删除和重新添加JRE库将使正确的类成为第一 . 如果您想要一个基本的解决方案,请确保使用相同的类排除jar文件 .
对我来说,我有:
javax.xml.soap.SOAPPart
在三个不同的 jar 里:axis-saaj-1.4.jar
,saaj-api-1.3.jar
和rt.jar
就我而言,构建路径JRE与执行环境中安装的JRE之间存在不匹配 . 我进入了Project> Properties> Java编译器 . 底部有一条警告信息 .
我点击了“已安装的JRE”,“执行环境”,“Java构建路径”链接,并将JDK版本更改为1.7,警告消失了 .
在您确定应该能够访问给定类的情况下,这可能意味着您向项目中添加了几个包含具有相同名称(或路径)但内容不同的类的jar并且它们相互遮蔽(通常是旧的自定义) build jar包含内置旧版本的第三方库) .
例如,当你添加一个jar实现:
但也是仅实施的旧版本:
在代码编辑器中一切正常但在编译过程中失败,如果“旧”库掩盖了新的 - d2突然变成“缺失或无法访问”,即使它存在 .
解决方案是检查编译时库的顺序,并确保具有正确实现的库先行 .
通过构建路径添加正确的JRE系统是解决方案,但您的日食仍然可能有错误 . 要解决这个问题,请转到Java Build path - > Order and Export并将JRE系统库移到顶部 . 这解决了我的问题 .
我也遇到了这个问题 . 显然我在构建路径中将JRE设置为1.5而不是1.6 .