web-dev-qa-db-fra.com

Restriction d'accès sur la classe en raison de la restriction sur la bibliothèque requise rt.jar?

J'essaie de compiler le code Java 1.4 créé par WSDL2Java d'IBM sur Java5 sans recréer les stubs et j'ai constaté cette erreur dans Eclipse. Je suppose que les stubs créés doivent uniquement être compilés tant que les fichiers jar d'exécution sont disponibles (ils le sont).

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

Le nom de classe complet est javax.xml.namespace.QName

Qu'est-ce qui se passe exactement ici? 

Est-ce un cas où j'essaie de reformer un cochon de saucisse? Suis-je mieux de recréer les stubs?

795
sal

Il existe une autre solution qui fonctionne aussi. 

  1. Accédez au chemin de constructiondans les propriétés du projet.
  2. Retirez la JRE System Library
  3. Rajoutez-le Sélectionnez "Ajouter une bibliothèque" et sélectionnez la Bibliothèque système JRE . Le défaut a fonctionné pour moi.

Cela fonctionne parce que vous avez plusieurs classes dans différents fichiers JAR. Si vous supprimez et rajoutez la bibliothèque JRE, les bonnes classes seront d’abord occupées . Si vous souhaitez une solution fondamentale, excluez les fichiers jar avec les mêmes classes.

Pour moi, j'ai: javax.xml.soap.SOAPPart dans trois pots différents: axis-saaj-1.4.jar, saaj-api-1.3.jar et le rt.jar

1833
Nels Beckman

http://www.digizol.com/2008/09/Eclipse-access-restriction-on-library.html a fonctionné le mieux pour moi. 

Sous Windows: Windows -> Préférences -> Java -> Compilateur -> Erreurs/Avertissements -> API obsolète et restreinte -> Référence interdite (règles d'accès): -> changer d'avertissement

Sur Mac OS X/Linux: Eclipse -> Préférences -> Java -> Compilateur -> Erreurs/Avertissements -> API obsolète et restreinte -> Référence interdite (règles d'accès): -> modification de l'avertissement

117
scommab

J'ai rencontré le même problème. J'ai trouvé la réponse sur le site web: http://www.17ext.com .
Tout d’abord, supprimez les bibliothèques système JRE. Importez ensuite à nouveau les bibliothèques système JRE. 

Je ne sais pas pourquoi. Cependant, cela a résolu mon problème, j'espère qu'il pourra vous aider.

67
sanwanxian

Je suppose que vous essayez de remplacer une classe standard livrée avec Java 5 par une autre dans une bibliothèque que vous possédez.

Cela n’est pas autorisé dans les termes du contrat de licence. Toutefois, selon les informations dont je dispose, il n’a pas été appliqué avant Java 5.

J'ai déjà vu cela avec QName auparavant et je l'ai "corrigé" en supprimant la classe du bocal que j'avais.

EDIT http://www.manpagez.com/man/1/Java/ notes pour l'option "-Xbootclasspath:" 

"Les applications qui utilisent cette option dans le but de remplacer une classe dans rt.jar ne doivent pas être déployées car cela enfreindrait la licence de code binaire de Java 2 Runtime Environment."

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

"Restrictions relatives à la technologie Java. Vous ne pouvez pas modifier l'interface de plate-forme Java (" JPI ", identifiées en tant que classes contenues dans Dans le package" Java "ou dans les sous-packages du package " Java "), en créant des classes supplémentaires dans le JPI ou , ce qui entraîne l'ajout ou la modification des classes dans le JPI Dans le cas où vous créez une classe supplémentaire et les API associées qui (i) sont étendues la fonctionnalité de la plate-forme Java, et (ii) est exposée aux développeurs tiers de logiciels dans le but de développer un logiciel supplémentaire qui appelle cette API supplémentaire. vous devez rapidement publier de manière générale un .__ Spécification exacte de cette API pour une utilisation gratuite par tous les développeurs Vous ne pouvez pas créer, ni autoriser vos preneurs de licence à créer, des classes, interfaces ou sous-packages supplémentaires ", " javax "," Sun "ou une convention similaire spécifiée par Sun dans toute désignation de convention de dénomination."

34
Peter Lawrey

Je reçois aussi cette erreur, mais mon projet est construit sur la ligne de commande en utilisant Maven et le compilateur tycho (il s’agit d’un ensemble de plugins OSGi). Après avoir passé au crible une foule de personnes ayant le même problème mais ayant résolu le problème dans Eclipse plutôt que sur la ligne de commande, j'ai trouvé un message sur le forum des développeurs Tycho qui a répondu à ma question, en utilisant la configuration dans pom.xml pour ignorer l'avertissement du compilateur la restriction d'accès:

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

Plus d’informations sont disponibles dans Tycho FAQ . Cela m'a pris un certain âge pour résoudre le problème, j'ai donc pensé que j'aiderais toute autre personne essayant de réparer ces erreurs de restriction d'accès à partir de la ligne de commande en postant cette réponse.

24
DuffJ
  • Accédez aux paramètres du chemin de construction dans les propriétés du projet .Windows -> Preferences -> Java Compiler
  • Supprimer la bibliothèque système JRE
  • Ajouter un autre JRE avec un "match parfait"
  • nettoyer et reconstruire votre projet. Cela a fonctionné pour moi.
13
Mayur

J'ai juste eu ce problème aussi. Apparemment, j'avais défini le JRE sur 1,5 au lieu de 1,6 dans mon chemin de génération.

13
Dorus

En plus de la solution de Nels Beckman , j'ai les astuces suivantes:

Sous Configure Build Path, je devais réorganiser l'ordre de mes entrées sous Order and Export.

De plus, en tant que développeur Eclipse PDE, je devais réorganiser l'ordre de mes dépendances dans mon MANIFEST.MF, en ajoutant le paquet problématique en premier sur la liste.

En jouant avec ces molettes, en même temps que Project> Clean, j'ai pu résoudre ces avertissements.

8
modulitos

pour moi ceci comment je le résous:

  • accédez au chemin build du projet en cours.

sous Bibliothèques

  • sélectionnez la "JRE System Library [jdk1.8xxx]"
  • cliquez edit
  • et sélectionnez "Espace de travail JRE par défaut (jdk1.8xx)" OU Autre JRE
  • Cliquez sur Terminer
  • Cliquez sur OK

 enter image description here

Remarque: assurez-vous que, dans Eclipse/Preferences (PAS le projet)/Java/Installed JRE, le jdk pointe vers le dossier JDK et non vers le JRE C:\Program Files\Java\jdk1.8.0_74

 enter image description here

7
usertest

Désolé de mettre à jour un ancien POST. J'ai eu le problème signalé et je l'ai résolu comme indiqué ci-dessous.

En supposant que vous utilisiez le plug-in Eclipse + m2e maven, si vous obtenez cette erreur de restriction d'accès, cliquez avec le bouton droit de la souris sur le projet/module dans lequel vous avez l'erreur -> Propriétés -> Chemin de construction -> Bibliothèque -> Remplacer JDK/JRE à celui utilisé dans l'espace de travail Eclipse.

J'ai suivi les étapes ci-dessus et le problème est résolu.

6

Dans le cas où vous êtes sûr de pouvoir accéder à une classe donnée, cela peut vouloir dire que vous avez ajouté à votre projet plusieurs fichiers jar contenant des classes avec des noms (ou chemins) identiques, mais un contenu différent jar de construction contient une version plus ancienne intégrée d’une bibliothèque tierce).

Par exemple, lorsque vous ajoutez un jar implémentant:

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

mais aussi une version plus ancienne implémentant uniquement:

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

Tout fonctionne bien dans l'éditeur de code, mais échoue lors de la compilation si la "vieille" bibliothèque occulte la nouvelle - d2 devient soudainement "manquant ou inaccessible", même lorsqu'elle est là.

La solution consiste à vérifier l'ordre des bibliothèques au moment de la compilation et à s'assurer que celle avec la bonne implémentation est la première.

5
Mr. Napik

Accédez au chemin de construction Java dans les propriétés du projet. Supprimez la bibliothèque système JRE existante Ajoutez-la à nouveau, par exemple Ajouter une bibliothèque -> JRE Lib - sélectionnez jre ---> Terminer . Enfin, sélectionnez commande et exportez onglet, sélectionnez JRE Lib et passez à autre chose. Haut. C'est tout.

4
Vijay Bhatt

Il suffit de changer l'ordre des bibliothèques de chemins de construction de votre projet. Cliquez avec le bouton droit de la souris sur le projet> Chemin de construction> Configurer le chemin de construction> Sélectionner la commande et exporter (Onglet)> Modifier l'ordre des entrées. J'espère que le déplacement de la "bibliothèque système JRE" vers le bas fonctionnera. Cela a fonctionné tellement pour moi. Facile et simple .... !!!

3
Samitha Chathuranga

Dans mon cas, il y avait une incompatibilité entre le chemin de génération JRE et le JRE installé sur l'environnement d'exécution. J'ai déménagé dans Projet> Propriétés> Compilateur Java. Il y avait un message d'avertissement en bas.

J'ai cliqué sur les liens "JRE installé", "Environnement d'exécution", "Chemin de génération Java" et ai changé la version du JDK en 1.7 et l'avertissement a disparu.

3
Soumyajit Swain

L'ajout d'un système JRE correct via le chemin de construction est la solution, mais votre Eclipse peut toujours avoir l'erreur . Pour résoudre ce problème, accédez à Chemin de construction Java -> Ordre et exportation et déplacez votre bibliothèque système JRE vers le haut. Cela a résolu mon problème.

0
Abhishek Soni