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

时间:2009-05-13 20:16:27

标签: java eclipse wsdl stub wsdl2java

我正在尝试编译由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 个答案:

答案 0 :(得分:1851)

还有另一种解决方案也有效。

  1. 转到项目属性中的构建路径设置。
  2. 删除 JRE系统库
  3. 加回来;选择“添加库”并选择 JRE系统库。默认对我有效。
  4. 这是有效的,因为您在不同的jar文件中有多个类。删除和重新添加JRE库将使正确的类成为第一。 如果您想要一个基本的解决方案,请确保使用相同的类排除jar文件。

    对我而言,我在javax.xml.soap.SOAPPartaxis-saaj-1.4.jarsaaj-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
  • 删除JRE系统库
  • 添加另一个“完美匹配”的JRE
  • 再次清理并构建项目。它对我有用。

答案 6 :(得分:13)

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

答案 7 :(得分:8)

除了Nels Beckman's solution之外,我还有以下提示:

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

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

使用这些拨号,以及运行 Project&gt;在两者之间清理,我能够解决这些警告。

答案 8 :(得分:8)

对我而言,我如何解决它:

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

在图书馆

  • 选择“ JRE系统库 [jdk1.8xxx]”
  • 点击修改
  • 并选择“工作区默认JRE(jdk1.8xx)”备用JRE
  • 点击完成
  • 点击确定

enter image description here

注意:确保在Eclipse / Preferences(不是项目)/ Java / Installed JRE中,jdk指向JDK文件夹而不是JRE C:\ Program Files \ Java \ jdk1.8.0_74 < /强>

enter image description here

答案 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系统库移到顶部。这解决了我的问题。