Обмеження доступу: Не доступне через обмеження необхідної бібліотеки .. \ jre \ lib \ rt.jar


76

Я намагаюся змінити деякий застарілий код ще з тих пір, і отримую такі помилки:

Обмеження доступу: Метод створення (JAXBRIContext, Object) із типу Headers недоступний через обмеження на необхідну бібліотеку .. \ jre \ lib \ rt.jar

для цих операторів імпорту:

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;

Шукав, що це може означати і як це виправити, проте не зміг знайти чіткої відповіді. Здається, деякі публікації говорять про те, що у мене є деякі JAR-файли, що реалізують класи, які тепер доступні як частина основного розподілу Java, але, наскільки я бачу, жоден із включених вами JAR-файлів не містить різних / старих версій вищезазначених класів.

Хто-небудь може сказати мені, у чому полягає ця помилка та як я можу вирішити цю проблему?

Дякуємо за вашу допомогу вже заздалегідь,

Оллі


Відповіді:


128

Я зіткнувся з чимось подібним, я думаю, що причиною попередження є Eclipse, яка намагається відмовити вас використовувати внутрішні com.sunпакети, які встановлені як частина робочої області JRE, але не є частиною загальнодоступного API Java.

Як говорить Джастін у своїй відповіді, зміна налаштувань компілятора може приховати попередження. Більш детальний підхід полягає у зміні шляху побудови, щоб явно дозволити доступ до відповідного пакету:

  1. Відкрийте вкладку Бібліотеки у вікні властивостей проекту Java Build Path.
  2. Розгорніть запис системної бібліотеки JRE.
  3. Виберіть "Правила доступу" і натисніть кнопку "Редагувати".
  4. Натисніть кнопку Додати в діалоговому вікні, що з’явиться.
  5. Для нового правила доступу встановіть роздільну здатність на Доступний, а шаблон - на "com/sun/xml/internal/**".

Після додавання цього правила доступу ваш проект повинен будуватися без попереджень.


1
хм, дивно не працювало для мене, але це в RAD 8, а не Eclipse ... той, що був, справді працював, звичайно, незрозуміло (просто додайте / видаліть JRE)
bcmoney

2
+1 за додавання конкретного правила доступу - замість відключення всіх попереджень. ти рок!
rjha94

Я ще один задоволений клієнт. Дякую за це!
TonyK

Чи можна зберегти це налаштування?
Раффі Хатчадуріан,

1
@Hervian Це суть попереджень - ці класи можуть змінюватися в будь-який момент часу. Якщо це можливо, вам слід уникати цих внутрішніх класів на користь використання загальнодоступного API. Тим не менш, багато з них є частиною OpenJDK і залишаються незмінними протягом багатьох років, так що ... це рішення з вашого боку.
Олексій

79

Відмінна відповідь вже надається тут .

Див. Резюме нижче:

  1. Перейдіть до налаштувань шляху побудови у властивостях проекту.
  2. Видаліть системну бібліотеку JRE
  3. Додайте його назад; Виберіть "Додати бібліотеку" та виберіть системну бібліотеку JRE. За замовчуванням у мене спрацювало.

Працював у мене після оновлення зі старішого jdk.
Кейсі Мюррей

Дякую! Працював у мене на Eclipse Kepler. Включення сервлета-api-3.1.jar із дистрибутива Jetty 9 до мого проекту спричинило проблему, очевидно. А може, це був плагін run jetty run. Ну добре, поки це працювало ..
faizal

1
@AdityaSingh Це працює, оскільки у вас є кілька класів у різних файлах jar. Видалення та повторне додавання бібліотеки JRE зробить правильні класи першими. Якщо ви хочете отримати фундаментальне рішення, не забудьте виключити jar-файли з тими ж класами. Будь ласка, зверніться до прийнятої відповіді на це питання.
Ashish Kumar

41

Неправдиве рішення, але скрізь, де я шукав, запропонованим рішенням було просто сказати Eclipse, що це не помилки. Ви можете змінити його, перейшовши у Властивості -> Компілятор Java -> Попередження про помилки -> Застарілі та обмежені API -> Заборонене посилання (правило доступу), змініть його з Помилка на Попередження або Ігнорувати.


це теж спрацювало! здається, найпростішим є або зробити це, або додати / видалити згідно з пропозицією @Abimbola.
bcmoney

Працював і у мене, але мені доводиться дивуватися, чому спочатку є попередження.
mister270

15

Я вирішив цю проблему за допомогою таких кроків: розгорніть проект, клацніть правою кнопкою миші «Системна бібліотека JRE»> Властивості> виберіть 3-й варіант «Робоча область JRE за замовчуванням»> Добре. Сподіваюся, це допоможе і вам


До речі, це буде скинуто кожного разу, коли ви робите Maven> Оновлення, якщо ви використовуєте Maven, а ви не встановили: <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>наприклад
ACV

8

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

Видаліть існуючу системну бібліотеку JRE, а потім Add Library -> JRE System library -> next -> ok

Помилка буде видалена.


5

У мене була та ж проблема, коли мій плагін залежав від іншого проекту, який експортував деякі пакети у своєму файлі маніфесту. Замість того, щоб змінювати правила доступу, мені вдалося вирішити проблему, додавши необхідні пакети до її розділу Export-Package. Це робить пакунки юридично видимими. Eclipse фактично надає це виправлення на маркері помилки "Обмеження доступу".


1

У середовищі eclipse, де ви виконуєте свої програми Java, виконайте такі дії:

  1. Клацніть на Project безпосередньо над рядком меню в eclipse.
  2. Клацніть на властивості.
  3. Виберіть бібліотеки, натисніть на існуючу бібліотеку та клацніть Видалити праворуч від вікна.
  4. Повторіть процес і натисніть кнопку додати бібліотеку, потім виберіть системну бібліотеку JRE і натисніть кнопку ОК.

0

Я відповідаю на це запитання, тому що я мав інший спосіб вирішити цю проблему, ніж інші відповіді. У мене виникла ця проблема, коли я відновив назву плагінів, які експортував. Зрештою мені довелося переконатись, що виправити / змінити наступне.

  1. Залежності файлу продукту,
  2. Залежності plugin.xml (і переконайтесь, що вони не імпліктовано імпортовані за допомогою діалогового вікна імпортованих пакетів).
  3. Вкладка плагінів конфігурації запуску. Запустити як ..-> Запустити конфігурації-> вкладка Плагіни. Зніміть позначку зі старих плагінів, а потім натисніть Додати обов’язкові плагіни.

Це спрацювало для мене, але ваш пробіг може відрізнятися.



-2

Перейдіть до Buildpath

Видаліть існуючий JRE та додайте нову бібліотеку JRE, яка містить Jdk1.6, і завершіть. Тепер очистіть весь проект та побудуйте знову

Я думаю, що таким чином ви можете вирішити свою помилку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.