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

sal*_*sal 813 java eclipse wsdl wsdl2java stub

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

到底发生了什么?

这是我试图用香肠重构一头猪的情况吗?我最好重新创建存根吗?

Nel*_*man 1866

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

  1. 转到项目属性中的" 构建路径"设置.
  2. 删除JRE系统库
  3. 加回来; 选择"添加库"并选择JRE系统库.默认对我有用.

这是有效的,因为您在不同的jar文件中有多个类.删除和重新添加JRE库将使正确的类成为第一.如果您想要一个基本的解决方案,请确保使用相同的类排除jar文件.

对我来说,我有:javax.xml.soap.SOAPPart在三个不同的罐子:axis-saaj-1.4.jar,saaj-api-1.3.jarrt.jar

  • +1在学校实验室计算机上工作(我无权修改许多东西),这就像一个魅力.谢谢. (14认同)
  • 最新版本的Eclipse下更好的解决方案不是删除JRE系统库,而是转到"订购和导出"选项卡,只需将JRE系统库移动到底部(这实际上是删除和添加它所做的,但是你不要不需要删除并添加来执行此操作. (7认同)
  • @ URL87如果右键单击项目文件夹,请转到"构建路径...","配置构建路径","库"(选项卡),您应该看到"添加库"作为右侧的一个按钮.这对我来说也很有魅力,很棒的答案 (3认同)

小智 119

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html最适合我.

在Windows上: Windows - >首选项 - > Java - >编译器 - >错误/警告 - >不推荐使用和受限制的API - >禁止引用(访问规则): - >更改为警告

在Mac OS X/Linux上: Eclipse - >首选项 - > Java - >编译器 - >错误/警告 - >不推荐使用和受限制的API - >禁止引用(访问规则): - >更改为警告

  • 这可能有效,但它不是一个合适的解决方案.您需要了解为什么首先存在访问限制.它还将隐藏所有未来的情况,这可能更重要! (61认同)
  • @AdrianMouat - 很有意义.我讨厌在核反应堆中做这样的事情 - 控制室里的热量太多了?因此,禁用所有警告.第二天成为头条新闻.:P (5认同)
  • @stolsvik - 你失去了我; 你在说这个问题存在的原因是无关紧要的吗? (3认同)

小智 67

我遇到了同样的问题.我在网站上找到了答案:http://www.17ext.com.
首先,删除JRE系统库.然后,再次导入JRE系统库.

我不知道为什么.但是它解决了我的问题,希望它可以帮到你.

  • 嗯,显然你几个月前就像我一样回答了这个问题.不知道为什么我当时没有看到你的回答...... (10认同)

Pet*_*rey 34

我的猜测是,您正在尝试将Java 5附带的标准类替换为您拥有的库中的一个.

根据许可协议的条款,这是不允许的,但是直到Java 5,AFAIK才会强制执行.

我以前用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在任何命名惯例中指定的类似约定."

  • 而已.路径中的一个罐子里面有QName类.找 .-name"*.jar"-print -exec unzip -t {} \; | grep"QName"找到了它. (2认同)

Duf*_*ffJ 25

我也得到了这个错误,但我的项目是使用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>
Run Code Online (Sandbox Code Playgroud)

更多信息可以在Tycho FAQ中找到.这让我花了很多时间来解决这个问题,所以我想通过发布这个答案,我会帮助其他试图从命令行修复这些访问限制错误的人.


小智 13

  • 转到项目属性中的"构建路径"设置. Windows -> Preferences -> Java Compiler
  • 删除JRE系统库
  • 添加另一个"完美匹配"的JRE
  • 清理并再次构建您的项目.它对我有用.


Dor*_*rus 13

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


mod*_*tos 8

除了Nels Beckman的解决方案,我还有以下提示:

配置构建路径下,我不得不重新排列订单和导出下的条目顺序.

另外,作为Eclipse PDE开发人员,我需要重新排列我的依赖项的顺序,MANIFEST.MF在列表中首先添加有问题的包.

使用这些拨号,以及运行项目>清洁之间,我能够解决这些警告.


use*_*est 8

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

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

在图书馆下

  • 选择" JRE系统库 [jdk1.8xxx]"
  • 点击编辑
  • 并选择"Workspace default JRE(jdk1.8xx)" Alternate JRE
  • 点击完成
  • 单击确定

在此输入图像描述

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

在此输入图像描述


Aru*_*ran 6

很抱歉更新旧的POST.我得到了报告的问题,我解决了它,如下所述.

假设您正在使用Eclipse + m2e maven插件,如果您遇到此访问限制错误,请右键单击您有错误的项目/模块 - >属性 - >构建路径 - >库 - >替换JDK/JRE到eclipse工作区中使用的那个.

我按照上述步骤解决了问题.


Mr.*_*pik 5

在您确定应该能够访问给定类的情况下,这可能意味着您向项目添加了几个包含具有相同名称(或路径)但内容不同的类的jar并且它们相互遮蔽(通常是旧的自定义) build jar包含内置旧版本的第三方库).

例如,当你添加一个jar实现:

a.b.c.d1
a.b.c.d2
Run Code Online (Sandbox Code Playgroud)

但也是仅实施的旧版本:

a.b.c.d1
(d2 is missing altogether or has restricted access)
Run Code Online (Sandbox Code Playgroud)

一切都在代码编辑器中正常工作,但在编译过程中如果"旧"库掩盖了新的那个 - d2突然变成"缺失或无法访问",即使它在那里.

解决方案是检查编译时库的顺序,并确保具有正确实现的库先行.


Vij*_*att 5

转到项目属性中的 Java 构建路径。删除现有的JRE系统库然后再次添加即添加库-->JRE Lib--选择jre-->完成。最后选择order 和 export选项卡选择 JRE Lib 并移至顶部。就是这样。