844 Stimmen

Zugriffsbeschränkung auf die Klasse aufgrund einer Beschränkung der erforderlichen Bibliothek rt.jar?

Ich versuche zu kompilieren Java 1.4 Code, der erstellt wurde von IBM's WSDL2Java auf Java5 ohne die Stubs neu zu erstellen und sah diesen Fehler in Eclipse .
Ich gehe davon aus, dass die generierten Stubs einfach kompiliert werden sollten, solange die Laufzeit jars verfügbar sind (sind sie).

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

Der vollständige Name der Klasse lautet javax.xml.namespace.QName

Was genau ist hier los? Ist dies ein Fall, in dem ich versuche, ein Schwein aus Wurst zu refaktorieren? Bin ich besser dran, wenn ich die Stubs neu erstelle?

1 Stimmen

Ich verstehe es nicht, warum Sie nicht einfach kompilieren es irgendwo anders und führen Sie es in Sie gezielte (so ich denke) 1.4 Umgebung?

0 Stimmen

Die letztendliche Zielumgebung ist jboss4.2 auf jdk5.

2 Stimmen

Über den "geschützten" Status: In StackOverflow sagt nichts so viel "Danke" oder "Ich auch" wie ein Upvote ;)

1909voto

Nels Beckman Punkte 20450

Es gibt eine andere Lösung, die ebenfalls funktioniert.

  1. Gehen Sie zum Pfad bauen Einstellungen in den Projekteigenschaften.
  2. Entfernen Sie die JRE-System-Bibliothek
  3. Wieder hinzufügen; Wählen Sie "Bibliothek hinzufügen" und wählen Sie die JRE-System-Bibliothek . Die Standardeinstellung hat bei mir funktioniert.

Das funktioniert, weil Sie mehrere Klassen in verschiedenen Jar-Dateien haben. Wenn Sie die JRE-Lib entfernen und erneut hinzufügen, werden die richtigen Klassen zuerst angezeigt. Wenn Sie eine grundlegende Lösung wünschen, schließen Sie die JAR-Dateien mit denselben Klassen aus.

Für mich schon: javax.xml.soap.SOAPPart in drei verschiedenen Gläsern: axis-saaj-1.4.jar , saaj-api-1.3.jar und die rt.jar

1 Stimmen

Handelt es sich um einen Eclipse-Bug oder umgehen wir versehentlich die Beschränkung (und verletzen die Lizenzbedingungen)? Wenn es ein Eclipse-Fehler ist, wurde dann ein Fehler gemeldet?

0 Stimmen

@Doctor Ich habe dies nie für einen besonders wichtigen Code verwendet, also habe ich nicht weiter nachgeforscht... Wenn Sie etwas herausfinden, lassen Sie es uns bitte wissen.

0 Stimmen

Wo ist "Bibliothek hinzufügen" in Eclipse?

129voto

scommab Punkte 1375

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html hat für mich am besten funktioniert.

Unter Windows: Windows -> Voreinstellungen -> Java -> Compiler -> Fehler/Warnungen -> Veraltete und eingeschränkte API -> Verbotene Referenz (Zugriffsregeln): -> in Warnung ändern

Unter Mac OS X/Linux: Eclipse -> Voreinstellungen -> Java -> Compiler -> Fehler/Warnungen -> Veraltete und eingeschränkte API -> Verbotene Referenz (Zugriffsregeln): -> Ändern in Warnung

66 Stimmen

Das mag funktionieren, ist aber keine richtige Lösung. Sie müssen verstehen, warum die Zugangsbeschränkung überhaupt bestand. Außerdem werden dadurch alle zukünftigen Fälle dieser Art ausgeblendet, was vielleicht noch wichtiger ist!

1 Stimmen

@AdrianMouat das ist so gut wie irrelevant. Wenn ich will, dass es verschwindet, dann will ich, dass es verschwindet. Aber sicher - man soll nicht gegen nicht-öffentliche APIs programmieren, nein.

3 Stimmen

@stolsvik - ich verstehe nicht ganz; wollen Sie damit sagen, dass der Grund, warum das Problem besteht, irrelevant ist?

70voto

sanwanxian Punkte 707

Ich bin auf das gleiche Problem gestoßen. Ich habe die Antwort auf der Website gefunden: http://www.17ext.com .
Löschen Sie zunächst die JRE-Systembibliotheken. Dann importieren Sie die JRE-Systembibliotheken erneut.

11 Stimmen

Offensichtlich haben Sie diese Frage auf die gleiche Weise beantwortet wie ich, und zwar vor einigen Monaten. Ich weiß nicht, warum ich Ihre Antwort damals nicht gesehen habe...

34voto

Peter Lawrey Punkte 511323

Ich vermute, dass Sie versuchen, eine Standardklasse, die mit Java 5 ausgeliefert wird, durch eine Klasse in einer Bibliothek zu ersetzen, die Sie besitzen.

Dies ist nach den Bedingungen der Lizenzvereinbarung nicht erlaubt, wurde aber AFAIK bis Java 5 nicht durchgesetzt.

Ich habe dies mit QName vor gesehen und ich "behoben" es durch Entfernen der Klasse aus dem jar ich hatte.

EDITAR http://www.manpagez.com/man/1/java/ Hinweise für die Option "-Xbootclasspath:"

"Anwendungen, die diese Option verwenden, um eine Klasse in rt.jar zu überschreiben, sollten nicht bereitgestellt werden, da dies gegen die Java 2 Runtime Environment Binärcode-Lizenz verstößt."

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

"Java-Technologie-Einschränkungen. Sie dürfen nicht die Java Platform Interface ("JPI", identifiziert als Klassen, die im Paket "java" oder in Unterpaketen des Pakets "java" Pakets), indem Sie zusätzliche Klassen innerhalb der JPI erstellen oder oder anderweitig die Hinzufügung oder Änderung der Klassen in der JPI. Für den Fall, dass Sie eine zusätzliche Klasse und zugehörige API(s), die (i) die Funktionalität der die Funktionalität der Java-Plattform erweitert und (ii) Software-Entwicklern zur Verfügung gestellt wird, um zusätzliche Software zu entwickeln, die diese zusätzliche zusätzliche API aufruft, müssen Sie unverzüglich eine genaue Spezifikation für diese API zur freien Verwendung durch alle Entwickler. Sie dürfen keine zusätzlichen Klassen, Schnittstellen oder Lizenznehmern erlauben, zusätzliche Klassen, Schnittstellen oder Unterpakete erstellen, die in irgendeiner Weise als "java", "javax", "sun" oder einer ähnlichen Konvention, wie sie von Sun in Benennungskonventionen bezeichnet werden."

2 Stimmen

Das war's. In einem der Jars im Pfad war die Klasse QName enthalten. find . -name "*.jar" -print -exec unzip -t {} \; |grep "QName" gefunden.

1 Stimmen

Könnten Sie einen Hinweis darauf geben, dass es nicht erlaubt ist, Klassen zu ersetzen, die mit Java ausgeliefert werden? Alles, was ich in der Lizenzvereinbarung gefunden habe, waren Einschränkungen in Bezug auf die Verbreitung von Java selbst, nicht von Java-Programmen, aber ich habe nicht lange gesucht.

28voto

Dawngerpony Punkte 2830

Ich habe diesen Fehler auch erhalten, aber mein Projekt wird auf der Kommandozeile mit Maven und dem tycho Compiler (es handelt sich um eine Reihe von OSGi-Plugins). Nach massenhaftem Durchforsten von Leuten, die das gleiche Problem hatten, es aber in Eclipse und nicht auf der Kommandozeile behoben haben, fand ich eine Nachricht im Tycho-Entwicklerforum die meine Frage beantwortete, indem ich die Konfiguration in pom.xml um die Compilerwarnung über die Zugriffsbeschränkung zu ignorieren:

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

Weitere Informationen finden Sie in der Tycho FAQ . Ich habe Ewigkeiten gebraucht, um das herauszufinden, also dachte ich mir, ich helfe allen anderen, die versuchen, diese Zugriffsbeschränkungsfehler über die Befehlszeile zu beheben, indem ich diese Antwort poste.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X