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

Я пытаюсь скомпилировать код 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 ответов

Решение

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

  1. Зайдите в настройки Build Path в свойствах проекта.
  2. Удалить системную библиотеку JRE
  3. Добавьте это назад; Выберите "Добавить библиотеку" и выберите Системную библиотеку JRE. По умолчанию работал для меня.

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

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

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ 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 в любом обозначении соглашения об именовании."

Я тоже получаю эту ошибку, но мой проект построен из командной строки с использованием 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>

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

  • Зайдите в настройки Build Path в свойствах проекта.Windows -> Preferences -> Java Compiler
  • Удалить системную библиотеку JRE
  • Добавьте еще одну JRE с "идеальным соответствием"
  • очистите и постройте свой проект снова. Это сработало для меня.

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

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

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

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

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

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

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

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

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

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

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

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

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

В случае, если вы уверены, что должны иметь доступ к данному классу, это может означать, что вы добавили в свой проект несколько jar-файлов, содержащих классы с одинаковыми именами (или путями), но разным содержимым, и они затмевают друг друга (как правило, старые пользовательские настройки). build jar содержит встроенную старую версию сторонней библиотеки).

Например, когда вы добавляете jar, реализующий:

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

но также и более старая версия, реализующая только:

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

В редакторе кода все работает нормально, но во время компиляции происходит сбой, если "старая" библиотека затмевает новую - d2 неожиданно оказывается "отсутствующей или недоступной", даже если она там есть.

Решение состоит в том, чтобы проверить порядок библиотек времени компиляции и убедиться, что библиотека с правильной реализацией идет первой.

Перейдите к пути сборки Java в свойствах проекта. Удалите существующую системную библиотеку JRE, затем добавьте ее снова, например, Добавить библиотеку ->JRE Lib- выберите jre---> Готово. Наконец, выберите заказ и вкладку экспорта, выберите JRE Lib и двигайтесь вверх. Вот и все.

Просто измените порядок пути к библиотекам вашего проекта. Щелкните правой кнопкой мыши по проекту>Build Path> Configure Build Path> Выберите Order and Export(Tab)> Изменить порядок записей. Я надеюсь, что перемещение "JRE System library" вниз будет работать. Это сработало для меня. Легко и просто....!!!

В моем случае было несоответствие между путем сборки JRE и установленным JRE в среде выполнения. Я перешел в Project > Properties > Java compiler. Внизу было предупреждающее сообщение.

Я нажал на ссылки "Установленный JRE", "Среда выполнения", "Путь сборки Java" и изменил версию JDK на 1.7, и предупреждение исчезло.

Добавление правильной системы JRE через путь сборки - решение, но ваше затмение все еще может иметь ошибку. Чтобы решить эту проблему, перейдите в Java Build path -> Order and Export и переместите вашу системную библиотеку JRE вверху. Это решило мою проблему.

Другие вопросы по тегам