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

Access restriction on class due to restriction on required library rt.jar?

我试图编译Java5上由IBM的WSDL2Java创建的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
t.jar

全名是javax.xml.namespace.QName

这里到底发生了什么?

在这种情况下,我是在试图从香肠中重构一头猪吗?我最好重新制作树桩吗?


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

  • 转到项目属性中的生成路径设置。
  • 删除JRE系统库
  • 重新添加;选择"添加库"并选择JRE系统库。默认值对我有效。
  • 这是因为在不同的JAR文件中有多个类。删除并重新添加JRE库将使正确的类成为第一个类。如果您想要一个基本的解决方案,请确保排除具有相同类的JAR文件。

    对我来说,我有三种不同的罐子:axis-saaj-1.4.jarsaaj-api-1.3.jarrt.jar


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

    在Windows上:Windows >首选项> java>编译器>错误/警告->已弃用和限制的API->禁止引用(访问规则):->更改为警告

    关于Mac OS X/Linux:Eclipse > >首选项> Java>编译器>错误/警告->已弃用和限制的API->禁止引用(访问规则):->更改为警告


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

    我不知道为什么。不过它解决了我的问题,希望它能帮助你。


    我猜你正在尝试用Java 5来替换一个标准类,在你拥有的库中有一个Java类。

    在许可协议的条款下,这是不允许的,但是它直到Java 5才被强制执行。

    我以前用qname看到过这个,我通过从jar中移除类来"修复"它。

    编辑http://www.manpagez.com/man/1/java/选项说明"-xbootclasspath:"

    "不应部署使用此选项来重写RT.jar中的类的应用程序,因为这样做会违反Java 2运行时环境二进制代码许可。"

    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在任何命名约定指定。"


    我也收到了这个错误,但是我的项目是在使用maven和tycho编译器(这是一组OSGi插件)的命令行上构建的。在大量筛选出有相同问题但在Eclipse而不是命令行中修复的人之后,我在Tycho开发者论坛上发现了一条消息,它回答了我的问题,使用pom.xml中的配置忽略了编译器关于访问限制的警告:

    1
    2
    3
    4
    5
    6
    7
    8
    <plugin>
        <groupId>org.eclipse.tycho</groupId>
        tycho-compiler-plugin</artifactId>
        <version>${tycho.version}</version>
        <configuration>
            <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
        </configuration>
    </plugin>

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


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


    • 转到项目属性中的生成路径设置。Windows -> Preferences -> Java Compiler
    • 删除JRE系统库
    • 添加另一个具有"完美匹配"的JRE
    • 重新清理和构建项目。这对我很有用。

    对我来说,这就是我解决问题的方法:

    • 转到当前项目的生成路径

    图书馆下

    • 选择"JRE系统库[JDK1.8XXX]"
    • 单击编辑
    • 并选择"工作区默认JRE(jdk1.8xx)"或备用JRE。
    • 单击完成
    • 单击确定

    enter image description here

    注意:确保在Eclipse /首选项(不是项目)/爪哇/安装的JRE中,JDK指向JDK文件夹,而不是JRE C:Projtudiojavajdk1.80y74。

    enter image description here


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

    在configure build path下,我必须重新排列order和export下条目的顺序。

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

    使用这些拨号,以及在其间运行project>clean,我可以解决这些警告。


    很抱歉更新了旧邮件。我得到了报告的问题,并按如下所述解决了它。

    假设您使用的是Eclipse+M2E Maven插件,如果您遇到此访问限制错误,请右键单击出现错误的项目/模块——>属性——>构建路径——>库——>将JDK/JRE替换为Eclipse工作区中使用的项目/模块。

    我遵循了上述步骤,问题解决了。


    在这种情况下,您确定您应该能够访问给定的类,这可能意味着您在项目中添加了几个JAR,这些JAR包含具有相同名称(或路径)但内容不同的类,并且它们相互之间的重叠(通常,旧的自定义构建JAR包含内置的第三方库的旧版本)。

    例如,当您添加一个JAR实现时:

    1
    2
    a.b.c.d1
    a.b.c.d2

    但旧版本仅实现:

    1
    2
    a.b.c.d1
    (d2 is missing altogether or has restricted access)

    在代码编辑器中,一切都可以正常工作,但如果"旧"库掩盖了新库,则编译过程中会失败-d2突然出现"丢失或不可访问",即使它在那里。

    解决方案是检查编译时库的顺序,并确保先执行正确的库。


    转到Projject属性中的Java构建路径。删除现有的JRE系统库然后再次添加,即添加库-->jre lib--选择jre--->完成。最后,选择"订单和导出"选项卡,选择JRE LIB并移到顶部。就是这样。


    只需更改项目的构建路径库的顺序。右键单击项目>构建路径>配置构建路径>选择顺序和导出(选项卡)>更改条目的顺序。我希望将"JRE系统库"移到底部可以工作。对我来说是这样的。简单明了……!!!!


    在我的例子中,在执行环境中,构建路径JRE和安装的JRE之间存在不匹配。我移动到Projt> Projt> Java编译器。底部有一条警告信息。

    我点击了链接"安装的JRE"、"执行环境"、"Java构建路径",并将JDK版本更改为1.7,警告消失了。


    通过构建路径添加一个正确的JRE系统是解决方案,但是Eclipse仍然可能有错误。要解决这个问题,请转到Java构建路径->订单并导出并在顶部移动JRE系统库。这解决了我的问题。