我试图在Java5上编译由IBM的WSDL2Java创建的Java1.4代码,而不重新创建存根,并在Eclipse中看到了这个错误。我的假设是,只要运行时jar可用(它们可用),生成的存根就应该编译。
访问限制:由于对所需库C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar的限制,QName类型不可访问
完整类名为javax.xml.namespace.QName
这里到底发生了什么?这是我试图用香肠重构猪的例子吗?我最好重新创建存根吗?
我试图在Java5上编译由IBM的WSDL2Java创建的Java1.4代码,而不重新创建存根,并在Eclipse中看到了这个错误。我的假设是,只要运行时jar可用(它们可用),生成的存根就应该编译。
访问限制:由于对所需库C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar的限制,QName类型不可访问
完整类名为javax.xml.namespace.QName
这里到底发生了什么?这是我试图用香肠重构猪的例子吗?我最好重新创建存根吗?
我的猜测是,您正在尝试用您拥有的库中的标准类替换Java5附带的标准类。
根据许可协议的条款,这是不允许的,但是AFAIK直到Java5才强制执行。
我以前在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中的类。如果您创建了(i)扩展的附加类和相关APIJava平台的功能,以及(ii)第三方软件开发人员开发额外的软件附加API,您必须立即广泛发布此类API的准确规范,供所有人免费使用开发人员。您不能创建或授权被许可方创建附加类、接口或以任何方式标识为“java”的子包,“javax”、“sun”或sun在任何命名约定名称。"
http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html对我来说效果最好。
在Windows上:Windows->首选项->Java->编译器->错误/警告->不推荐和受限制的API->禁止的引用(访问规则):->更改为警告
在Mac OS X/Linux上:Eclipse->首选项->Java->编译器->错误/警告->不推荐和受限制的API->禁止的引用(访问规则):->更改为警告
还有另一种解决方案也有效。
转到项目财产中的“生成路径”设置。删除JRE系统库将其添加回;选择“添加库”并选择JRE系统库。默认值对我有效。
这是因为在不同的jar文件中有多个类。删除和重新添加JRE库将首先选择正确的类。如果您想要一个基本的解决方案,请确保排除具有相同类的jar文件。
对我来说,我有三个不同的jar中的javax.xml.soap.SOAPPart:axis-saaj-1.4.jar、saaj-api-1.3.jar和rt.jar
在这种情况下,如果您确定应该能够访问给定的类,那么这可能意味着您向项目中添加了几个jar,这些jar包含具有相同名称(或路径)但内容不同的类,并且它们相互覆盖(通常,旧的自定义构建jar包含内置的第三方库的旧版本)。
例如,当您添加一个jar实现:
a.b.c.d1
a.b.c.d2
而且是仅实现以下功能的旧版本:
a.b.c.d1
(d2 is missing altogether or has restricted access)
在代码编辑器中,一切都很好,但如果“旧”库覆盖了新库,则在编译过程中会失败-d2突然变得“丢失或无法访问”,即使它存在。
解决方案是检查编译时库的顺序,并确保首先使用具有正确实现的库。
抱歉更新旧POST。我得到了报告的问题,并按照如下所述解决了它。
假设您使用的是Eclipse+m2e maven插件,如果出现此访问限制错误,请右键单击出现错误的项目/模块-->财产-->构建路径-->库-->将JDK/JRE替换为在Eclipse工作区中使用的项目/模块。
我遵循了上述步骤,问题得到了解决。
我也遇到过这个错误,但我的项目是在命令行上使用Maven和tycho编译器构建的(这是一组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>
更多信息可以在Tycho FAQ中找到。这让我花了好几年的时间,所以我想我会通过发布这个答案来帮助其他任何试图从命令行修复这些访问限制错误的人。
在我的案例中,生成路径JRE和执行环境中安装的JRE之间不匹配。我进入了项目>财产>Java编译器。底部有一条警告信息。
我单击链接“Installed JRE”、“Execution environment”、“Java build path”,将JDK版本更改为1.7,警告消失。
除了Nels Beckman的解决方案,我还有以下建议:
在ConfigureBuild Path下,我必须重新排列order和Export下条目的顺序。
此外,作为一名EclipsePDE开发人员,我需要重新排列MANIFEST.MF中依赖项的顺序,将有问题的包添加到列表的第一位。
使用这些刻度盘,同时在其间运行Project>Clean,我能够解决这些警告。
只需更改项目的构建路径库的顺序。右键单击项目>构建路径>配置构建路径>选择顺序和导出(选项卡)>更改条目的顺序。我希望将“JRE系统库”移到底部会起作用。这对我来说很有效。简单又简单。。。。!!!
转到项目财产中的Java构建路径。删除现有的JRE系统库然后再次添加,即添加库-->JRE库-->选择JRE-->完成。最后选择order和export选项卡,选择JRE Lib并移至顶部。就是这样。
对我来说,我是这样解决的:
转到当前项目的生成路径
在库下
选择“JRE系统库[jdk1.8xxx]”单击“编辑”并选择“工作区默认JRE(jdk1.8xx)”或“备用JRE”单击“完成”单击“确定”
注意:确保在Eclipse/Preferences(而不是项目)/Java/Installed JRE中,jdk指向jdk文件夹,而不是JRE C:\Program Files\Java\jdk1.8.0_74
通过构建路径添加正确的JRE系统是解决方案,但您的eclipse可能仍然存在错误。要解决此问题,请转到Java Build路径-->Order and Export,然后将JRE系统库移到顶部。这解决了我的问题。