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

744

Я пытаюсь скомпилировать код 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.4?
  • 0
    Конечной целевой средой является jboss4.2 на jdk5.
Показать ещё 3 комментария
Теги:
stub
wsdl
wsdl2java

15 ответов

1713
Лучший ответ

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

  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

  • 14
    +1 Работая на школьном лабораторном компьютере (где у меня нет разрешения изменять многие вещи), это сработало как шарм. Спасибо.
  • 1
    Это ошибка Eclipse или мы случайно обходим ограничение (и нарушаем условия лицензии)? Если это ошибка Eclipse, то есть ли ошибка?
Показать ещё 9 комментариев
118

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

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

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

  • 58
    Это может сработать, но это не правильное решение. Вы должны понять, почему ограничения доступа существовали в первую очередь. Это также скрывает все будущие случаи этого, что может быть более важным!
  • 1
    @AdrianMouat, который в значительной степени не имеет значения. Если я хочу, чтобы это ушло, я хочу, чтобы это ушло. Но, конечно же, никто не должен кодировать против непубличных API, нет.
Показать ещё 6 комментариев
63

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

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

  • 10
    Да, видимо, вы ответили на этот вопрос так же, как и я, несколько месяцев назад. Не уверен, почему я не видел ваш ответ тогда ...
33

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

  • 2
    вот и все. в одном из jar-файлов пути был класс QName. находить . -name "* .jar" -print -exec unzip -t {} \; | grep "QName" нашел его.
  • 1
    Не могли бы вы дать ссылку о том, что нельзя заменять классы, поставляемые с Java? Все, что я нашел в лицензионном соглашении, это ограничения, связанные с распространением самой Java, а не программ на Java, но я не очень долго искал.
24

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

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

  • 1
    Та же проблема здесь. В моем случае используется Maven, который по умолчанию равен 1,5, если не указан.
  • 0
    Не забудьте поместить это в свой POM, чтобы он не изменился обратно при обновлении. <properties> <maven.compiler.source> 1.8 </maven.compiler.source> <maven.compiler.target> 1.8 </maven.compiler.target> </ properties>
13
  • Перейдите в настройки пути сборки в свойствах проекта. Windows -> Preferences -> Java Compiler
  • Удалить библиотеку JRE
  • Добавить еще одну JRE с "идеальным совпадением"
  • очистите и снова создайте свой проект. Это сработало для меня.
8

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

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

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

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

6

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

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

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

  • 0
    Справедливо, но вы в основном воспроизвели формулировку принятого ответа Нельс Бекман.
5

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

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

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

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

Изображение 1382

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

Изображение 1383

  • 0
    Мой уже был установлен на 1,7 ... 79, поэтому я был в панике. Но я просто выбрал его снова, нажал «Применить», и ошибка исчезла. Уф.
5

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

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

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

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

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

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

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

4

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

3

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

3

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню