Как сделать внутренний пакет Java доступным в Eclipse?

У меня есть устаревший проект Java (8), открытый в Eclipse с Java 11 (или Java 10). Eclipse теперь справедливо жалуется на недоступные пакеты. Например. com.apple.laf.AquaComboBoxUI.

При компиляции из командной строки я могу сделать эти пакеты доступными явно, добавив параметр в javac:

--add-exports java.desktop/com.apple.laf=ALL-UNNAMED

Есть ли способ сделать то же самое из среды Eclipse IDE? Я попытался добавить доступное правило в библиотеку JDK. Но, похоже, это не повлияло. Любые идеи?

И да, я знаю, что мы должны перевести проект на использование только официальных API. Но это долгий-долгий путь ...

UIManager.createLookAndFeel - полезный способ получить ссылку на встроенный внешний вид.

Alan Bateman 16.09.2018 09:59

@AlanBateman, как получить необходимое имя для UIManager.createLookAndFeel? Я знаю только UIManager.getSystemLookAndFeelClassName(), который подходит для UIManager.setLookAndFeel, но createLookAndFeel, похоже, ожидает «имя», а не имя класса…

Holger 17.09.2018 17:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
2
7 685
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как уже упоминалось, здесь, вы можете добавить параметры, переданные с помощью javac в командной строке, в Eclipse, выполнив следующие действия:

  • Щелкните Run->Run Configurations.

  • В появившемся окне под Main tabBrowse the project и Main class, для которых вы хотите передать аргументы.

  • Теперь щелкните вкладку Arguments.
  • В текстовом поле Program arguments: введите ${string_prompt}.
  • Щелкните Apply and Close.

Теперь, когда вы запустите приложение Java, появится приглашение. Вы можете добавить сюда все свои аргументы, разделенные пробелом.

Эти аргументы передаются не компилятору java, а среде выполнения java (java). Следовательно, они влияют на ваше приложение только во время выполнения. Они не влияют на встроенный компилятор в IDE.

Michael 21.09.2018 11:09

Вам необходимо установить серьезность проблемы. Это подпадает под forbidden reference (access rules) под Java Compiler -> Errors/Warnings.

К сожалению, это не помогает. Для справки: сообщение об ошибке в Eclipse: «Тип com.apple.laf.AquaComboBoxUI недоступен».

Michael 20.09.2018 16:01

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

Dakshinamurthy Karra 20.09.2018 17:08
Ответ принят как подходящий

Отвечаю на свой вопрос, так как нашел решение.

  1. В настройках Eclipse перейдите к: Путь сборки JavaБиблиотекиПуть к модулюСистемная библиотека JRE
  2. Разверните его и дважды щелкните: Модульный (изменяет инкапсуляцию)
  3. Перейти на вкладку Подробности
  4. Добавьте новый экспорт: например, java.desktopcom.apple.laf

У меня была такая же проблема, но исправлена ​​другим способом. На шаге 3 оставайтесь на вкладке «Содержание», затем найдите соответствующую библиотеку в поле «Неявно включенные модули», выберите ее, затем нажмите кнопку со стрелкой вверх, чтобы переместить ее в поле «Явно включенные модули». Мне пришлось сделать это с java.naming, чтобы импортировать классы в javax.naming)

Kip 28.05.2020 21:37

на самом деле не обращайте внимания на то, что я сказал выше ... это заставило его скомпилировать, но затем у меня возникли ошибки во время выполнения. в конечном итоге для меня это оказалось потому, что я обновил версию jdk для сборки, но tomcat все еще использовал старую версию jdk при запуске

Kip 02.06.2020 15:46

У меня такая же проблема, у меня есть модуль lwjgl.jar в папке проекта lib/jars, и я пытаюсь использовать import org.lwjgl.opengl.Display; и получаю такое же недоступное сообщение - этот ответ выглядит как самый близкий, который я могу найти, но я не понимаю, что экспорт сделать. Что мне вводить в поля Source module и Package? похоже, он не распознает lwjgl или что-то еще, что я пробовал.

Merlin Katz 27.06.2020 21:41

Разобрался, мне нужно было включить строку requires lwjgl; в мой файл module-info.java: /

Merlin Katz 22.07.2020 00:21

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