我正在尝试编译由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
这到底发生了什么?
这是我试图用香肠重构猪的情况吗?我最好重新创建存根吗?
答案 0 :(得分:1851)
还有另一种解决方案也有效。
这是有效的,因为您在不同的jar文件中有多个类。删除和重新添加JRE库将使正确的类成为第一。 如果您想要一个基本的解决方案,请确保使用相同的类排除jar文件。
对我而言,我在javax.xml.soap.SOAPPart
,axis-saaj-1.4.jar
和saaj-api-1.3.jar
rt.jar
答案 1 :(得分:118)
http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html对我来说效果最好。
在Windows上: Windows - >偏好 - > Java - >编译器 - >错误/警告 - >弃用和受限制的API - >禁止参考(访问规则): - >改为警告
在Mac OS X / Linux上: Eclipse - >偏好 - > Java - >编译器 - >错误/警告 - >弃用和受限制的API - >禁止参考(访问规则): - >改为警告
答案 2 :(得分:67)
我遇到了同样的问题。我在网站上找到了答案:http://www.17ext.com 首先,删除JRE系统库。然后,再次导入JRE系统库。
我不知道为什么。但是它解决了我的问题,希望它可以帮助你。
答案 3 :(得分:34)
我的猜测是,您正在尝试将Java 5附带的标准类替换为您拥有的库中的一个。
根据许可协议的条款不允许这样做,但AFAIK直到Java 5才强制执行。
之前我用QName看过这个,我通过从我的jar中删除类来“修复”它。
EDIT 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中指定的类似惯例 任何命名惯例。“
答案 4 :(得分:24)
我也遇到了这个错误,但我的项目是使用Maven和tycho编译器(它是一组OSGi插件)在命令行上构建的。在大量筛选具有相同问题的人员但是在Eclipse中而不是在命令行上修复它之后,我发现a message on the Tycho developer forum回答了我的问题,使用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中找到更多信息。这让我花了很多时间,所以我想通过发布这个答案,我会帮助其他人试图通过命令行修复这些访问限制错误。
答案 5 :(得分:13)
Windows -> Preferences -> Java Compiler
答案 6 :(得分:13)
我也遇到了这个问题。显然我在构建路径中将JRE设置为1.5而不是1.6。
答案 7 :(得分:8)
除了Nels Beckman's solution之外,我还有以下提示:
在配置构建路径下,我必须重新排列订单和导出下的条目顺序。
此外,作为Eclipse PDE开发人员,我需要在MANIFEST.MF
中重新排列我的依赖项的顺序,将有问题的包添加为列表中的第一个。
使用这些拨号,以及运行 Project&gt;在两者之间清理,我能够解决这些警告。
答案 8 :(得分:8)
对我而言,我如何解决它:
在图书馆
下注意:确保在Eclipse / Preferences(不是项目)/ Java / Installed JRE中,jdk指向JDK文件夹而不是JRE C:\ Program Files \ Java \ jdk1.8.0_74 < /强>
答案 9 :(得分:6)
很抱歉更新旧的POST。我得到了报告的问题,我解决了它,如下所述。
假设您使用的是Eclipse + m2e maven插件,如果您遇到此访问限制错误,请右键单击您遇到错误的项目/模块 - &gt;属性 - &gt;构建路径 - &gt;图书馆 - &gt;将JDK / JRE替换为eclipse工作区中使用的那个。
我按照上述步骤解决了问题。
答案 10 :(得分:5)
如果您确定应该能够访问给定的类,那么这可能意味着您向项目中添加了几个包含具有相同名称(或路径)但内容不同的类的jar并且它们彼此相形见绌(通常旧的自定义构建jar包含第三方库的内置旧版本。)
例如,当您添加一个实现:
的jar时a.b.c.d1
a.b.c.d2
但也是仅实施的旧版本:
a.b.c.d1
(d2 is missing altogether or has restricted access)
在代码编辑器中一切正常但在编译期间失败,如果“旧”库掩盖了新的 - d2突然变成“缺失或无法访问”,即使它在那里。
解决方案是检查编译时库的顺序,并确保首先执行正确的库。
答案 11 :(得分:4)
转到项目属性中的Java Build Path。删除现有的JRE系统库 然后再添加它,即添加库 - &gt; JRE Lib - 选择jre ---&gt;完成。 最后选择订单并导出标签选择JRE Lib并移至顶部。就是这样。
答案 12 :(得分:3)
在我的情况下,构建路径JRE与执行环境中安装的JRE之间存在不匹配。我搬进了Project&gt;属性&gt; Java编译器。底部有一条警告信息。
我点击了链接&#39;已安装的JRE&#39;,&#39;执行环境&#39; Java构建路径&#39;并将JDK版本更改为1.7,警告消失。
答案 13 :(得分:3)
只需更改项目的构建路径库的顺序即可。右键单击项目&gt; Build Path&gt;配置构建路径&gt;选择订单和导出(选项卡)&gt;更改条目的顺序。我希望移动&#34; JRE系统库&#34;到底是可行的。它对我有用。简单易行...... !!!
答案 14 :(得分:0)
通过构建路径添加正确的JRE系统是解决方案,但您的日食仍然可能有错误。 要解决这个问题,请转到Java Build path - &gt;订购和导出并将您的JRE系统库移到顶部。这解决了我的问题。