Ограничение доступа к классу из-за ограничения на требуемую библиотеку rt.jar? - PullRequest
803 голосов
/ 14 мая 2009

Я пытаюсь скомпилировать код Java 1.4, созданный IBM WSDL2Java для Java5, без воссоздания заглушек и увидел эту ошибку в Eclipse. Я предполагаю, что созданные заглушки должны просто компилироваться, пока доступны файлы времени выполнения (они есть).

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

Полное имя класса: javax.xml.namespace.QName

Что именно здесь происходит?

Это тот случай, когда я пытаюсь переработать свинью из колбасы? Мне лучше воссоздать заглушки?

Ответы [ 15 ]

1853 голосов
/ 01 февраля 2010

Есть еще одно решение, которое также работает.

  1. Перейти к настройкам Путь сборки в свойствах проекта.
  2. Удалить системную библиотеку JRE
  3. Добавьте его обратно; Выберите «Добавить библиотеку» и выберите системную библиотеку JRE . По умолчанию у меня сработало.

Это работает, потому что у вас есть несколько классов в разных файлах jar. Удаление и повторное добавление библиотеки JRE сделает правильные классы первыми. Если вы хотите фундаментальное решение, убедитесь, что вы исключаете файлы JAR с теми же классами.

Для меня у меня есть: javax.xml.soap.SOAPPart в трех разных банках: axis-saaj-1.4.jar, saaj-api-1.3.jar и rt.jar

117 голосов
/ 16 января 2010

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html работал лучше всего для меня.

В Windows: Windows -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения -> Устаревший и ограниченный API -> Запрещенная ссылка (правила доступа): -> изменить на предупреждение

В Mac OS X / Linux: Eclipse -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения -> Устаревший и ограниченный API -> Запрещенная ссылка (правила доступа): -> изменить на предупреждение

67 голосов
/ 23 ноября 2009

Я встретил ту же проблему. Я нашел ответ на сайте: http://www.17ext.com.
Сначала удалите системные библиотеки JRE. Затем снова импортируйте системные библиотеки JRE.

Я не знаю почему. Как бы то ни было, это решило мою проблему, надеюсь, это поможет вам.

34 голосов
/ 14 мая 2009

Полагаю, вы пытаетесь заменить стандартный класс, поставляемый с Java 5, на класс в вашей библиотеке.

Это не разрешено в соответствии с условиями лицензионного соглашения, однако AFAIK не применялся до Java 5.

Я видел это с QName раньше, и я "исправил" это, удалив класс из банки, которая была у меня.

EDIT http://www.manpagez.com/man/1/java/ примечания для опции "-Xbootclasspath:"

«Приложения, использующие этот параметр для переопределения класса в rt.jar, не должны развертываться, поскольку это противоречит лицензии двоичного кода Java 2 Runtime Environment.»

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

«Ограничения технологии Java. Вы не можете изменять Java Интерфейс платформы («JPI», обозначенный как содержащиеся в нем классы) в пакете "java" или любых подпакетах "java" пакет), создавая дополнительные классы в JPI или в противном случае вызывает добавление или изменение занятия в JPI. В случае, если вы создаете дополнительный класс и связанные API, которые (i) расширяются функциональность платформы Java, и (II) раскрывается сторонним разработчикам программного обеспечения с целью разработка дополнительного программного обеспечения, которое вызывает такие дополнительный API, вы должны быстро публиковать точная спецификация для такого API для свободного использования всеми Разработчики. Вы не можете создавать или авторизовать свой Лицензиаты для создания дополнительных классов, интерфейсов или подпакеты, которые в любом случае определены как "Java", "Javax", "Sun" или аналогичные соглашения, как указано в Sun в любое обозначение соглашения об именах. "

24 голосов
/ 06 сентября 2013

Я тоже получаю эту ошибку, но мой проект построен из командной строки с использованием Maven и компилятора tycho (это набор плагинов OSGi). После массового перебора людей, имеющих ту же проблему, но исправляющих ее в Eclipse, а не в командной строке, я нашел сообщение на форуме разработчиков Tycho , которое ответило на мой вопрос, используя конфигурацию в pom.xml, чтобы игнорировать предупреждение компилятора об ограничении доступа:

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

Дополнительную информацию можно найти в Tycho FAQ . Это заняло у меня ВОЗРАСТ, и я решил, что помогу кому-нибудь другому, пытающемуся исправить эти ошибки ограничения доступа из командной строки, отправив этот ответ.

13 голосов
/ 01 июля 2011

У меня тоже была эта проблема. Очевидно, я установил JRE на 1,5 вместо 1,6 в моем пути сборки.

13 голосов
/ 31 марта 2010
  • Перейти к настройкам пути сборки в свойствах проекта. Windows -> Preferences -> Java Compiler
  • Удалить системную библиотеку JRE
  • Добавить еще одну JRE с "идеальным соответствием"
  • очистите и постройте свой проект снова. У меня это сработало.
8 голосов
/ 20 марта 2016

для меня вот как я это решаю:

  • перейти к пути сборки текущего проекта

по библиотекам

  • выберите « Системная библиотека JRE [jdk1.8xxx]»
  • нажмите изменить
  • и выберите «JRE рабочей области по умолчанию (jdk1.8xx)» ИЛИ Альтернативный JRE
  • Нажмите готово
  • Нажмите OK

enter image description here

Примечание: убедитесь, что в Eclipse / Preferences (НЕ в проекте) / Java / Installed JRE jdk указывает на папку JDK, а не на JRE C: \ Program Files \ Java \ jdk1.8.0_74

enter image description here

8 голосов
/ 01 июня 2014

В дополнение к решению Нельса Бекмана у меня есть следующие советы:

В Настройка пути сборки , мне пришлось изменить порядок моих записей в Порядок и экспорт .

Кроме того, как разработчику Eclipse PDE, мне нужно было изменить порядок моих зависимостей в моем MANIFEST.MF, добавив проблемный пакет в качестве первого в списке.

Играя с этими циферблатами, а также запуская Project> Clean между ними, я смог разрешить эти предупреждения.

6 голосов
/ 24 мая 2013

Извините за обновление старого POST. Я получил сообщение об ошибке и решил ее, как указано ниже.

Если вы используете плагин Eclipse + m2e maven, если вы получите эту ошибку ограничения доступа, щелкните правой кнопкой мыши проект / модуль, в котором у вас есть ошибка -> Свойства -> Путь сборки -> Библиотека -> Замените JDK / JRE на тот, который используется в рабочей области Eclipse.

Я выполнил вышеуказанные шаги, и проблема была решена.

...