Ограничение доступа к классу из-за ограничений на требуемую библиотеку 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

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

Ответ 1

Там также работает другое решение.

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

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

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

Ответ 2

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

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

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

Ответ 3

Я встретил ту же проблему. Я нашел ответ на веб-сайте: http://www.17ext.com.
Во-первых, удалите JRE System Libraries. Затем импортируйте JRE System Libraries снова.

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

Ответ 4

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

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

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

ИЗМЕНИТЬ 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 в любое обозначение условного обозначения.

Ответ 5

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

Ответ 6

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

Ответ 7

У меня тоже была эта проблема. По-видимому, я установил JRE на 1.5 вместо 1.6 в моем пути сборки.

Ответ 8

В дополнение к Nels Beckman solution, у меня есть следующие советы:

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

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

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

Ответ 9

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

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

в библиотеках

  • выберите " JRE System Library [jdk1.8xxx]"
  • нажмите править
  • и выбрать "Рабочее пространство по умолчанию JRE (jdk1.8xx)" ИЛИ Alternate JRE
  • Нажмите фишку
  • Нажмите ОК.

enter image description here

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

enter image description here

Ответ 10

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

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

Я выполнил следующие шаги, и проблема решена.

Ответ 11

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

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

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

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

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

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

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

Ответ 12

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

Ответ 13

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

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

Ответ 14

Просто измените порядок библиотек пути сборки вашего проекта. Щелкните правой кнопкой мыши по проекту > Путь сборки > Настроить путь сборки > Выбрать порядок и экспорт (вкладка) > Изменить порядок записей. Я надеюсь, что работа над "Системой JRE System" будет работать. Это сработало для меня. Легко и просто....!!!

Ответ 15

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