it-swarm.com.de

Zugriffsbeschränkung für die Klasse aufgrund der Beschränkung der erforderlichen Bibliothek

Ich versuche, Java 1.4-Code zu kompilieren, der von IBM WSDL2Java auf Java5 erstellt wurde, ohne die Stubs neu zu erstellen, und habe diesen Fehler in Eclipse gesehen. Ich gehe davon aus, dass die erstellten Stubs nur kompiliert werden sollten, solange die Laufzeitgläser verfügbar sind.

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 Klassenname lautet javax.xml.namespace.QName

Was genau ist hier los? 

Ist dies ein Fall, in dem ich versuche, ein Schwein aus Wurst zu refactorieren? Kann ich die Stubs besser neu erstellen?

795
sal

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

  1. Gehen Sie in den Projekteigenschaften zu den Einstellungen von Build Path .
  2. Entfernen Sie die JRE-Systembibliothek
  3. Fügen Sie es zurück; Wählen Sie "Add Library" und wählen Sie die JRE-Systembibliothek . Die Standardeinstellung hat für mich funktioniert.

Dies funktioniert, weil Sie mehrere Klassen in verschiedenen JAR-Dateien haben. Wenn Sie die JRE-Bibliothek entfernen und erneut hinzufügen, werden die richtigen Klassen an erster Stelle stehen .. Wenn Sie eine grundlegende Lösung benötigen, schließen Sie die JAR-Dateien mit den gleichen Klassen aus.

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

1833
Nels Beckman

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

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

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

117
scommab

Ich traf das gleiche Problem. Ich habe die Antwort auf der Website gefunden: http://www.17ext.com .
Löschen Sie zunächst die JRE-Systembibliotheken. Importieren Sie anschließend erneut JRE-Systembibliotheken. 

Ich weiß nicht warum. Aber es hat mein Problem behoben, ich hoffe es kann Ihnen helfen.

67
sanwanxian

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

Dies ist unter den Bedingungen der Lizenzvereinbarung nicht zulässig, jedoch wurde AFAIK bis Java 5 nicht durchgesetzt.

Ich habe das schon mit QName gesehen und habe es "behoben", indem ich die Klasse aus dem Glas entfernte, das ich hatte.

EDIT http://www.manpagez.com/man/1/Java/ notes für die Option "-Xbootclasspath:" 

"Anwendungen, die diese Option zum Überschreiben einer Klasse in rt.jar verwenden, sollten nicht implementiert werden, da dies der Lizenz für Binärcode von Java 2 Runtime Environment zuwiderlaufen würde."

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

"Java-Technologieeinschränkungen. Sie können die Java Platform-Schnittstelle (" JPI ", die als Klassen identifiziert ist Innerhalb des" Java "-Pakets oder untergeordneter Pakete des" Java " -Pakets) nicht durch Erstellen geändert werden zusätzliche Klassen innerhalb des JPI oder , die sonst dazu führen, dass die Klassen im JPI hinzugefügt oder geändert werden. Für den Fall, dass Sie eine zusätzliche Klasse und zugehörige APIs erstellen, die (i) erweitert werden Die Funktionalität der Java-Plattform und (ii) wird Dritten Softwareentwicklern zur Verfügung gestellt, um zusätzliche Software zu entwickeln, die eine solche zusätzliche API aufruft. Sie müssen umgehend eine umfassende genaue Spezifikation für eine solche API zur kostenlosen Verwendung durch alle Entwickler. Sie dürfen Ihre -Lizenznehmer nicht für die Erstellung zusätzlicher Klassen, Schnittstellen oder -Unterpakete erstellen oder autorisieren, die in irgendeiner Weise als "Java" bezeichnet werden ", " javax "," Sun "oder eine ähnliche Konvention, wie von Sun in angegeben, beliebige Namenskonventionsbezeichnung."

34
Peter Lawrey

Ich habe diesen Fehler auch erhalten, aber mein Projekt wird in der Befehlszeile mit Maven und dem tycho - Compiler (es ist eine Reihe von OSGi-Plugins) erstellt. Nachdem ich massenweise Leute durchsucht hatte, die dasselbe Problem hatten, aber in Eclipse statt in der Befehlszeile behoben wurden, fand ich eine Nachricht im Tycho-Entwicklerforum , die meine Frage beantwortete und die Konfiguration in pom.xml verwendete, um die Warnung des Compilers zu ignorieren die Zugangsbeschränkung:

<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 im Tycho FAQ . Ich brauchte ein ALTER, um zu klären, also dachte ich, ich würde jedem helfen, der versucht, diese Zugriffsbeschränkungen über die Befehlszeile zu beheben, indem er diese Antwort veröffentlicht.

24
DuffJ
  • Wechseln Sie zu den Build-Pfad-Einstellungen in den Projekteigenschaften .Windows -> Preferences -> Java Compiler
  • Entfernen Sie die JRE-Systembibliothek
  • Fügen Sie eine weitere JRE mit "perfekter Übereinstimmung" hinzu.
  • reinige und baue dein Projekt erneut auf. Es hat für mich funktioniert.
13
Mayur

Ich hatte auch gerade dieses Problem. Anscheinend hatte ich die JRE in meinem Erstellungspfad auf 1,5 statt 1,6 gesetzt.

13
Dorus

Neben der Lösung von Nels Beckman habe ich folgende Tipps:

Unter Build-Pfad konfigurieren musste ich die Reihenfolge meiner Einträge unter Order and Export ändern.

Als Eclipse PDE-Entwickler musste ich außerdem die Reihenfolge meiner Abhängigkeiten in meinem MANIFEST.MF ändern und das problematische Paket als erstes auf der Liste hinzufügen.

Beim Spielen mit diesen Wählscheiben und dem Ausführen von Project> Clean dazwischen konnte ich diese Warnungen beheben.

8
modulitos

für mich das wie ich es löse:

  • gehen Sie zum build-Pfad des aktuellen Projekts

unter Bibliotheken

  • wählen Sie die "JRE-Systembibliothek [jdk1.8xxx]" aus.
  • klicken Sie auf edit
  • wählen Sie entweder "Workspace default JRE (jdk1.8xx)" ODER Alternate JRE aus
  • Klicken Sie auf Fertig stellen
  • OK klicken

 enter image description here

Hinweis: Stellen Sie sicher, dass in Eclipse/Preferences (NICHT das Projekt)/Java/Installierte JRE der Jdk-Ordner auf den JDK-Ordner verweist und nicht auf JRE C:\Programme\Java\jdk1.8.0_74.

 enter image description here

7
usertest

Tut mir leid, dass Sie einen alten POST aktualisiert haben. Ich habe das gemeldete Problem erhalten und es wurde wie nachstehend beschrieben gelöst.

Angenommen, Sie verwenden Eclipse + m2e maven plugin. Wenn Sie diesen Zugriffsbeschränkungsfehler erhalten, klicken Sie mit der rechten Maustaste auf das Projekt/Modul, in dem der Fehler aufgetreten ist -> Eigenschaften -> Erstellungspfad -> Bibliothek -> JDK ersetzen /. JRE zu dem, der im Eclipse-Arbeitsbereich verwendet wird.

Ich habe die obigen Schritte befolgt und das Problem ist gelöst.

Wenn Sie sicher sind, dass Sie auf bestimmte Klassen zugreifen können, kann dies dazu führen, dass Sie Ihrem Projekt mehrere Gläser hinzugefügt haben, die Klassen mit identischen Namen (oder Pfaden), aber unterschiedlichen Inhalten enthalten und sich gegenseitig überschatten (normalerweise eine alte Gewohnheit) Build jar enthält eine integrierte ältere Version einer Drittanbieter-Bibliothek.

Zum Beispiel, wenn Sie ein Jar hinzufügen, das Folgendes implementiert:

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

aber auch eine ältere Version, die nur Folgendes implementiert:

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

Im Code-Editor funktioniert alles einwandfrei, schlägt jedoch während der Kompilierung fehl, wenn die "alte" Bibliothek die neue überschattet - d2 stellt sich plötzlich als "fehlend" oder "unzugänglich" heraus, selbst wenn sie vorhanden ist.

Die Lösung besteht darin, die Reihenfolge der Bibliotheken zur Kompilierungszeit zu überprüfen und sicherzustellen, dass die Bibliothek mit der korrekten Implementierung an erster Stelle steht.

5
Mr. Napik

Gehen Sie zu Java Build Path in den Projekteigenschaften. Entfernen Sie die vorhandene JRE-Systembibliothek und fügen Sie sie erneut hinzu, dh Add Library -> JRE Lib - wählen Sie jre ---> Finish bestellen und exportieren Reiter wählen Sie JRE Lib und bewegen Sie sich nach oben.

4
Vijay Bhatt

Ändern Sie einfach die Reihenfolge der Buildpfadbibliotheken Ihres Projekts. Klicken Sie mit der rechten Maustaste auf Projekt> Erstellungspfad> Erstellungspfad konfigurieren> Reihenfolge und Export auswählen (Registerkarte)> Reihenfolge der Einträge ändern. Ich hoffe, dass das Verschieben der "JRE System Library" nach unten funktioniert. Es hat so für mich funktioniert. Einfach und einfach .... !!!

3

In meinem Fall gab es einen Konflikt zwischen dem Buildpfad JRE und dem installierten JRE in der Ausführungsumgebung. Ich bin in Projekt> Eigenschaften> Java-Compiler umgezogen. Unten war eine Warnmeldung.

Ich klickte auf die Links 'Installierte JRE', 'Ausführungsumgebung', 'Java-Erstellungspfad' und änderte die JDK-Version auf 1.7, und die Warnung verschwand.

3
Soumyajit Swain

Das Hinzufügen eines rechten JRE-Systems über den Build-Pfad ist die Lösung, aber Ihr Eclipse hat möglicherweise noch den Fehler .. Um das Problem zu beheben, gehen Sie zum Java-Build-Pfad -> Bestellen und Exportieren und verschieben Sie Ihre JRE-Systembibliothek oben. Das hat mein Problem gelöst.

0
Abhishek Soni