8

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

1

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

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

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

5 ответ(ов)

19

Вот другое решение, которое также работает:

  1. Перейдите в настройки Build Path в свойствах проекта.
  2. Удалите JRE System Library.
  3. Добавьте его обратно: выберите "Add Library" и выберите JRE System Library. По умолчанию у меня сработало.

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

У меня, например, есть javax.xml.soap.SOAPPart в трех разных jar-файлах: axis-saaj-1.4.jar, saaj-api-1.3.jar и rt.jar.

1

Если вы столкнулись с проблемой ограничения доступа к библиотекам в Eclipse, вот что мне помогло:

Для Windows:

  1. Перейдите в меню WindowsPreferences.
  2. Найдите раздел JavaCompilerErrors/Warnings.
  3. Прокрутите вниз до Deprecated and restricted API.
  4. Найдите пункт Forbidden reference (access rules) и измените его на warning.

Для Mac OS X/Linux:

  1. Откройте EclipsePreferences.
  2. Выберите JavaCompilerErrors/Warnings.
  3. Перейдите к Deprecated and restricted API.
  4. Найдите Forbidden reference (access rules) и измените его на warning.

После этих изменений предупреждения о запрещенных ссылках должны отображаться как предупреждения, а не как ошибки, что упростит разработку.

0

Я столкнулся с той же проблемой. Я нашёл ответ на сайте: http://www.17ext.com.

Сначала удалите библиотеки JRE System. Затем импортируйте библиотеки JRE System заново.

0

Судя по всему, вы пытаетесь заменить стандартный класс, который идет в комплекте с Java 5, на класс из вашей библиотеки. Это недопустимо в соответствии с условиями лицензионного соглашения, однако на практике это правило стало строго применяться только с Java 5.

Я сталкивался с подобной ситуацией с классом QName и "решил" проблему, удалив этот класс из своего JAR-файла.

EDIT: В документации по команде java (http://www.manpagez.com/man/1/java/) указано о параметре "-Xbootclasspath:" следующее:

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

Также обратите внимание на лицензию JRE (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."

0

Чтобы решить вашу проблему, следуйте этим шагам:

  1. Перейдите в настройки пути сборки в свойствах проекта: Windows -> Preferences -> Java Compiler.

  2. Удалите библиотеку JRE System Library.

  3. Добавьте другую JRE с "идеальным соответствием".

  4. Очистите и соберите проект снова.

Это помогло мне. Надеюсь, и вам поможет!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь