csdnceshi67
bug^君
采纳率100%
2009-05-13 20:16

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

已采纳

I'm attempting to compile Java 1.4 code that was created by IBM's WSDL2Java on Java5 without recreating the stubs and saw this error in Eclipse. I'm under the assumption that the stubs created should just compile as long as the runtime jars are available (they are).

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

The full classname is javax.xml.namespace.QName

What exactly is going on here?

Is this a case where I am trying to refactor a pig from sausage? Am I better off recreating the stubs?

转载于:https://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-required-library-rt-jar

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

14条回答

  • weixin_41568131 10.24 11年前

    There's another solution that also works.

    1. Go to the Build Path settings in the project properties.
    2. Remove the JRE System Library
    3. Add it back; Select "Add Library" and select the JRE System Library. The default worked for me.

    This works because you have multiple classes in different jar files. Removing and re-adding the JRE lib will make the right classes be first. If you want a fundamental solution make sure you exclude the jar files with the same classes.

    For me I have: javax.xml.soap.SOAPPart in three different jars: axis-saaj-1.4.jar, saaj-api-1.3.jar and the rt.jar

    点赞 23 评论 复制链接分享
  • csdnceshi53 Lotus@ 8年前

    I have been getting this error too, but my project is built on the command line using Maven and the tycho compiler (it's a set of OSGi plugins). After masses of sifting through people having the same problem but fixing it in Eclipse rather than on the command line, I found a message on the Tycho developer forum that answered my question, using configuration in pom.xml to ignore the compiler warning about the access restriction:

    <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-compiler-plugin</artifactId>
        <version>${tycho.version}</version>
        <configuration>
            <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
        </configuration>
    </plugin>
    

    More information can be found in the Tycho FAQ. This took me AGES to work out, so I figured I would assist anyone else trying to fix these access restriction errors from the command line by posting this answer.

    点赞 10 评论 复制链接分享
  • csdnceshi76 斗士狗 10年前

    I just had this problem too. Apparently I had set the JRE to 1.5 instead of 1.6 in my build path.

    点赞 9 评论 复制链接分享
  • csdnceshi67 bug^君 12年前

    My guess is that you are trying to replace a standard class which ships with Java 5 with one in a library you have.

    This is not allowed under the terms of the license agreement, however AFAIK it wasn't enforced until Java 5.

    I have seen this with QName before and I "fixed" it by removing the class from the jar I had.

    EDIT http://www.manpagez.com/man/1/java/ notes for the option "-Xbootclasspath:"

    "Applications that use this option for the purpose of overriding a class in rt.jar should not be deployed as doing so would contravene the Java 2 Runtime Environment binary code license."

    The http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE

    "Java Technology Restrictions. You may not modify the Java Platform Interface ("JPI", identified as classes contained within the "java" package or any subpackages of the "java" package), by creating additional classes within the JPI or otherwise causing the addition to or modification of the classes in the JPI. In the event that you create an additional class and associated API(s) which (i) extends the functionality of the Java platform, and (ii) is exposed to third party software developers for the purpose of developing additional software which invokes such additional API, you must promptly publish broadly an accurate specification for such API for free use by all developers. You may not create, or authorize your licensees to create, additional classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar convention as specified by Sun in any naming convention designation."

    点赞 8 评论 复制链接分享
  • weixin_41568183 零零乙 8年前

    Sorry for updating an old POST. I got the reported problem and I solved it as said below.

    Assuming you are using Eclipse + m2e maven plugin, if you get this access restriction error, right click on the project/module in which you have the error --> Properties --> Build Path --> Library --> Replace JDK/JRE to the one that is used in eclipse workspace.

    I followed the above steps and the issue is resolved.

    点赞 7 评论 复制链接分享
  • csdnceshi69 YaoRaoLov 7年前

    Just change the order of build path libraries of your project. Right click on project>Build Path> Configure Build Path>Select Order and Export(Tab)>Change the order of the entries. I hope moving the "JRE System library" to the bottom will work. It worked so for me. Easy and simple....!!!

    点赞 7 评论 复制链接分享
  • weixin_41568174 from.. 7年前

    In my case there was a mismatch between the build path JRE and installed JRE on execution environment. I moved into Project > Properties > Java compiler. There was a warning message at the bottom.

    I clicked on the links 'Installed JRE', 'Execution environment', 'Java build path' and changed the JDK version to 1.7 and the warning disappeared.

    点赞 6 评论 复制链接分享
  • csdnceshi55 ~Onlooker 8年前

    In the case you are sure that you should be able to access given class, than this can mean you added several jars to your project containing classes with identical names (or paths) but different content and they are overshadowing each other (typically an old custom build jar contains built-in older version of a 3rd party library).

    For example when you add a jar implementing:

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

    but also an older version implementing only:

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

    Everything works fine in the code editor but fails during the compilation if the "old" library overshadows the new one - d2 suddenly turns out "missing or inaccessible" even when it is there.

    The solution is a to check the order of compile-time libraries and make sure that the one with correct implementation goes first.

    点赞 5 评论 复制链接分享
  • csdnceshi64 游.程 5年前

    for me this how I solve it:

    • go to the build path of the current project

    under Libraries

    • select the "JRE System Library [jdk1.8xxx]"
    • click edit
    • and select either "Workspace default JRE(jdk1.8xx)" OR Alternate JRE
    • Click finish
    • Click OK

    enter image description here

    Note: make sure that in Eclipse / Preferences (NOT the project) / Java / Installed JRE ,that the jdk points to the JDK folder not the JRE C:\Program Files\Java\jdk1.8.0_74

    enter image description here

    点赞 5 评论 复制链接分享
  • weixin_41568131 10.24 7年前

    In addition to Nels Beckman's solution, I have the following tips:

    Under Configure Build Path, I had to rearrange the order of my entries under Order and Export.

    Additionally, as an Eclipse PDE developer, I needed to rearrange the order of my dependencies in my MANIFEST.MF, adding the problematic package as first on the list.

    Playing with these dials, along with running Project > Clean in between, I was able to resolve these warnings.

    点赞 5 评论 复制链接分享
  • csdnceshi67 bug^君 12年前

    I met the same problem. I found the answer in the website:http://www.17ext.com.
    First,delete the JRE System Libraries. Then,import JRE System Libraries again.

    I don't know why.However it fixed my problem,hope it can help you.

    点赞 3 评论 复制链接分享
  • weixin_41568174 from.. 11年前
    • Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
    • Remove the JRE System Library
    • Add another JRE with a "perfect match"
    • clean and build your project again. It worked for me.
    点赞 3 评论 复制链接分享
  • csdnceshi55 ~Onlooker 6年前

    Go to the Java Build Path in the project properties. Remove the existing JRE System Library Then Add it again i.e. Add Library-->JRE Lib--select jre--->Finish. Lastly select order and export tab select JRE Lib and move on top. That's it.

    点赞 3 评论 复制链接分享
  • csdnceshi72 谁还没个明天 4年前

    Adding a right JRE System through build path is the solution but your eclipse still may have the error. To solve that go to Java Build path --> Order and Export and move your JRE system library on the top. This has solved my problem.

    点赞 评论 复制链接分享