it-swarm.com.ru

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

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

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

795
sal

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

  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

1833
Nels Beckman

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

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

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

117
scommab

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

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

67
sanwanxian

Я предполагаю, что вы пытаетесь заменить стандартный класс, который поставляется с 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, вы должны незамедлительно опубликовать широко accurate спецификации для такого API для свободного использования всеми разработчиками. Вы не можете создавать или разрешать своим лицензиатам создавать дополнительные классы, интерфейсы или подпакеты, которые в любом случае идентифицируются как «Java». ", " javax "," Sun "или аналогичное соглашение, указанное Sun в любом обозначении соглашения об именах."

34
Peter Lawrey

Я тоже получаю эту ошибку, но мой проект построен из командной строки с использованием Maven и tycho compiler (это набор плагинов 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 . Это заняло у меня ВОЗРАСТ, и я решил, что помогу кому-нибудь еще, пытающемуся исправить эти ошибки ограничения доступа из командной строки, разместив этот ответ.

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

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

13
Dorus

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

В Configure Build Path мне пришлось изменить порядок моих записей в Order and Export.

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

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

8
modulitos

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

  • перейти к build path текущего проекта

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

  • выберите «Системная библиотека JRE [jdk1.8xxx]»
  • нажмите изменить
  • и выберите либо «JRE рабочей области по умолчанию (jdk1.8xx)» , ЛИБО альтернативный 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

7
usertest

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

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

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

6
Arun B Chandrasekaran

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

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

5
Mr. Napik

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

4
Vijay Bhatt

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

3
Samitha Chathuranga

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

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

3
Soumyajit Swain

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

0
Abhishek Soni