首页 文章

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

提问于
浏览
789

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

  • 5
    • 转到项目属性中的“构建路径”设置 . Windows -> Preferences -> Java Compiler

    • 删除JRE系统库

    • 使用"perfect match"添加另一个JRE

    • 清理并再次构建您的项目 . 它对我有用 .

  • 8

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

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

  • 66

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

    • 转到当前项目的 build path

    在图书馆下

    • 选择“ JRE System Library [jdk1.8xxx]”

    • 点击 edit

    • 并选择"Workspace default JRE(jdk1.8xx)" OR 备用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

  • 6

    只需更改项目的构建路径库的顺序即可 . 右键单击项目>构建路径>配置构建路径>选择顺序和导出(选项卡)>更改条目的顺序 . 我希望将“JRE系统库”移到底部是可行的 . 它对我有用 . 简单...... !!!

  • 3

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

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

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

  • 116

    http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html对我来说效果最好 .

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

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

  • 3

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

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

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

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

  • 4

    我的猜测是你试图用你自己的库替换Java 5附带的标准类 .

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

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

  • 13

    我也得到了这个错误,但我的项目是使用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中找到 . 这让我老去了解决了,所以我想通过发布这个答案,我会帮助其他试图从命令行修复这些访问限制错误的人 .

  • 7

    转到项目属性中的Java Build Path . 删除现有的JRE系统库然后再添加它,即添加库 - > JRE Lib - 选择jre ---> Finish . 最后选择 order and export 选项卡选择JRE Lib并移至顶部 . 而已 .

  • 13

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

    • 转到项目属性中的“构建路径”设置 .

    • 删除JRE系统库

    • 加回来;选择"Add Library"并选择JRE系统库 . 默认对我有用 .

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

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

  • 34

    就我而言,构建路径JRE与执行环境中安装的JRE之间存在不匹配 . 我进入了Project> Properties> Java编译器 . 底部有一条警告信息 .

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

  • 1818

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

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

    a.b.c.d1
    a.b.c.d2
    

    但也是仅实施的旧版本:

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

    在代码编辑器中一切正常但在编译过程中失败,如果“旧”库掩盖了新的 - d2突然变成“缺失或无法访问”,即使它存在 .

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

  • 0

    通过构建路径添加正确的JRE系统是解决方案,但您的日食仍然可能有错误 . 要解决这个问题,请转到Java Build path - > Order and Export并将JRE系统库移到顶部 . 这解决了我的问题 .

  • 24

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

相关问题