Zugriffsbeschränkung: Ist aufgrund der Einschränkung der erforderlichen Bibliothek nicht zugänglich. \ Jre \ lib \ rt.jar

76

Ich versuche, alten Code von vor einiger Zeit zu ändern und erhalte die folgenden Fehler:

Zugriffsbeschränkung: Auf die Methode create (JAXBRIContext, Object) vom Typ Headers kann aufgrund der Einschränkung der erforderlichen Bibliothek nicht zugegriffen werden. \ Jre \ lib \ rt.jar

für diese Importanweisungen:

import com.sun.xml.internal.bind.api.JAXBRIContext;
import com.sun.xml.internal.ws.api.message.Header;
import com.sun.xml.internal.ws.api.message.Headers;
import com.sun.xml.internal.ws.developer.WSBindingProvider;

Ich habe gesucht, was dies bedeuten könnte und wie ich es beheben kann, konnte jedoch keine klare Antwort finden. Einige Beiträge scheinen darauf hinzudeuten, dass einige JARs enthalten sind, die Klassen implementieren, die jetzt als Teil der Java-Kerndistribution verfügbar sind. Soweit ich jedoch sehe, enthält keine der von mir enthaltenen JARs andere / ältere Versionen der oben genannten Klassen.

Kann mir jemand sagen, worum es bei diesem Fehler geht und wie ich ihn beheben kann?

Vielen Dank für Ihre Hilfe bereits im Voraus,

Olli

user567602
quelle

Antworten:

128

Ich bin auf etwas Ähnliches gestoßen. Ich denke, die Ursache für die Warnung ist, dass Eclipse versucht, Sie davon abzuhalten, die internen com.sunPakete zu verwenden, die als Teil Ihrer Arbeitsbereich-JRE installiert sind, aber nicht Teil der öffentlichen Java-API sind.

Wie Justin in seiner Antwort sagt, kann das Ändern Ihrer Compilereinstellungen die Warnung verbergen. Ein differenzierterer Ansatz besteht darin, Ihren Erstellungspfad so zu ändern, dass der Zugriff auf das betreffende Paket explizit möglich ist:

  1. Öffnen Sie die Registerkarte Bibliotheken im Eigenschaftenfenster des Java Build Path-Projekts.
  2. Erweitern Sie den Eintrag JRE System Library.
  3. Wählen Sie "Zugriffsregeln" und klicken Sie auf die Schaltfläche Bearbeiten.
  4. Klicken Sie im daraufhin angezeigten Dialogfeld auf die Schaltfläche Hinzufügen.
  5. Setzen Sie für die neue Zugriffsregel die Auflösung auf Zugänglich und das Muster auf "com/sun/xml/internal/**".

Nach dem Hinzufügen dieser Zugriffsregel sollte Ihr Projekt ohne diese Warnung erstellt werden.

Alex
quelle
1
hmm, seltsam hat bei mir nicht funktioniert, aber das ist in RAD 8 nicht Eclipse ... das unten hat natürlich funktioniert, unerklärlicherweise (einfach die JRE hinzufügen / entfernen)
bcmoney
2
+1 für das Hinzufügen einer bestimmten Zugriffsregel - anstatt alle Warnungen zu deaktivieren. du rockst!
rjha94
Ich bin ein weiterer zufriedener Kunde. Danke dafür!
TonyK
Ist es möglich, diese Einstellung zu speichern?
Raffi Khatchadourian
1
@Hervian Das ist der Punkt der Warnungen - diese Klassen können sich zu jedem Zeitpunkt ändern. Wenn möglich, sollten Sie diese internen Klassen zugunsten der Verwendung der öffentlichen API vermeiden. Das heißt, viele von ihnen sind Teil von OpenJDK und seit Jahren unverändert. Es ist also ein Urteil von Ihrer Seite.
Alex
79

Ausgezeichnete Antwort bereits vor Ort bietet hier .

Siehe die folgende Zusammenfassung:

  1. Wechseln Sie in den Projekteigenschaften zu den Einstellungen für den Erstellungspfad.
  2. Entfernen Sie die JRE-Systembibliothek
  3. Füge es wieder hinzu; Wählen Sie "Bibliothek hinzufügen" und wählen Sie die JRE-Systembibliothek. Die Standardeinstellung hat bei mir funktioniert.
Abimbola
quelle
Arbeitete für mich nach dem Update von einem älteren JDK.
Casey Murray
Vielen Dank! Arbeitete für mich an Eclipse Kepler. Das Einbeziehen des Servlet-api-3.1.jar aus der Jetty 9-Distribution in mein Projekt hat das Problem anscheinend verursacht. Oder vielleicht war es das Run Jetty Run Plugin. Na
ja
1
@AdityaSingh Dies funktioniert, weil Sie mehrere Klassen in verschiedenen JAR-Dateien haben. Wenn Sie die JRE-Bibliothek entfernen und erneut hinzufügen, stehen die richtigen Klassen an erster Stelle. Wenn Sie eine grundlegende Lösung wünschen, stellen Sie sicher, dass Sie die JAR-Dateien mit denselben Klassen ausschließen. Bitte beziehen Sie sich auf die akzeptierte Antwort auf diese Frage.
Ashish Kumar
41

Keine echte Lösung, aber überall, wo ich hinschaute, bestand die vorgeschlagene Lösung darin, Eclipse einfach zu sagen, dass dies keine Fehler sind. Sie können es ändern, indem Sie zu Eigenschaften -> Java-Compiler -> Fehlerwarnungen -> Veraltete und neu eingestellte APIs -> Verbotene Referenz (Zugriffsregel) gehen. Ändern Sie es von Fehler in Warnung oder Ignorieren.

Justin
quelle
das hat auch funktioniert! Am einfachsten scheint es zu sein, dies entweder zu tun oder gemäß dem Vorschlag von @Abimbola hinzuzufügen / zu entfernen.
bcmoney
Hat auch für mich funktioniert, aber ich muss mich fragen, warum die Warnung überhaupt da ist.
Mister270
15

Ich habe dieses Problem mit den folgenden Schritten gelöst: Erweitern Sie Ihr Projekt, klicken Sie mit der rechten Maustaste auf "JRE-Systembibliothek"> Eigenschaften> wählen Sie die dritte Option "Arbeitsbereich-Standard-JRE"> OK. Hoffe es hilft dir auch

Candra
quelle
Übrigens wird dies jedes Mal zurückgesetzt, wenn Sie Maven> Update ausführen, falls Sie Maven verwenden und nicht festgelegt haben: <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>Zum Beispiel
ACV
8

In Eclipse:
Project -> properties -> java Build Path -> libraries

Entfernen Sie dann die vorhandene JRE-Systembibliothek Add Library -> JRE System library -> next -> ok

Fehler wird entfernt.

Bilal Ashraf
quelle
5

Ich hatte das gleiche Problem, als mein Plugin von einem anderen Projekt abhängig war, das einige Pakete in seine Manifestdatei exportierte. Anstatt die Zugriffsregeln zu ändern, habe ich es geschafft, das Problem zu lösen, indem ich die erforderlichen Pakete in den Abschnitt Export-Package aufgenommen habe. Dies macht die Pakete rechtlich sichtbar. Eclipse bietet dieses Update tatsächlich für die Fehlermarkierung "Zugriffsbeschränkung" an.

Val
quelle
1

Führen Sie in der Eclipse-Umgebung, in der Sie Ihre Java-Programme ausführen, die folgenden Schritte aus:

  1. Klicken Sie in Eclipse direkt über der Menüleiste auf Projekt.
  2. Klicken Sie auf Eigenschaften.
  3. Wählen Sie Bibliotheken aus, klicken Sie auf die vorhandene Bibliothek und klicken Sie rechts im Fenster auf Entfernen.
  4. Wiederholen Sie den Vorgang und klicken Sie nun auf Bibliothek hinzufügen. Wählen Sie dann JRE-Systembibliothek aus und klicken Sie auf OK.
Leleji Godwin
quelle
0

Ich beantworte diese Frage, weil ich dieses Problem auf andere Weise behoben habe als die anderen Antworten. Ich hatte dieses Problem, als ich den Namen der Plugins, die ich exportierte, überarbeitete. Schließlich musste ich sicherstellen, dass Folgendes behoben / geändert wurde.

  1. Die Abhängigkeiten der Produktdatei,
  2. Die Plugin.xml-Abhängigkeiten (und stellen Sie sicher, dass sie nicht implizit über das Dialogfeld "Importierte Pakete" importiert werden).
  3. Die Registerkarte Konfigurations-Plug-Ins ausführen. Ausführen als ..-> Konfigurationen ausführen-> Registerkarte Plug-Ins. Deaktivieren Sie die alten Plugins und klicken Sie dann auf Erforderliche Plugins hinzufügen.

Dies hat bei mir funktioniert, aber Ihr Kilometerstand kann variieren.

Lucas
quelle
0

Ich habe gerade die Projektfacette auf 1.7 geändert und es hat funktioniert.

Magno C.
quelle
-2

Gehe zu Buildpath

Entfernen Sie die vorhandene JRE und fügen Sie eine neue JRE-Bibliothek hinzu, die Jdk1.6 enthält. Beenden Sie nun das gesamte Projekt und erstellen Sie es erneut

Ich denke, auf diese Weise können Sie Ihren Fehler beheben

DevArea
quelle