У меня есть устаревший проект 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. Но это долгий-долгий путь ...
@AlanBateman, как получить необходимое имя для UIManager.createLookAndFeel? Я знаю только UIManager.getSystemLookAndFeelClassName(), который подходит для UIManager.setLookAndFeel, но createLookAndFeel, похоже, ожидает «имя», а не имя класса…




Как уже упоминалось, здесь, вы можете добавить параметры, переданные с помощью javac в командной строке, в Eclipse, выполнив следующие действия:
Щелкните Run->Run Configurations.
В появившемся окне под Main tabBrowse the project и Main class, для которых вы хотите передать аргументы.
Arguments.Program arguments: введите ${string_prompt}.Apply and Close.Теперь, когда вы запустите приложение Java, появится приглашение. Вы можете добавить сюда все свои аргументы, разделенные пробелом.
Эти аргументы передаются не компилятору java, а среде выполнения java (java). Следовательно, они влияют на ваше приложение только во время выполнения. Они не влияют на встроенный компилятор в IDE.
Вам необходимо установить серьезность проблемы. Это подпадает под forbidden reference (access rules) под Java Compiler -> Errors/Warnings.
К сожалению, это не помогает. Для справки: сообщение об ошибке в Eclipse: «Тип com.apple.laf.AquaComboBoxUI недоступен».
Пожалуйста, проверьте это еще раз. Я попробовал это на чистом проекте, прежде чем опубликовать ответ.
Отвечаю на свой вопрос, так как нашел решение.
У меня была такая же проблема, но исправлена другим способом. На шаге 3 оставайтесь на вкладке «Содержание», затем найдите соответствующую библиотеку в поле «Неявно включенные модули», выберите ее, затем нажмите кнопку со стрелкой вверх, чтобы переместить ее в поле «Явно включенные модули». Мне пришлось сделать это с java.naming, чтобы импортировать классы в javax.naming)
на самом деле не обращайте внимания на то, что я сказал выше ... это заставило его скомпилировать, но затем у меня возникли ошибки во время выполнения. в конечном итоге для меня это оказалось потому, что я обновил версию jdk для сборки, но tomcat все еще использовал старую версию jdk при запуске
У меня такая же проблема, у меня есть модуль lwjgl.jar в папке проекта lib/jars, и я пытаюсь использовать import org.lwjgl.opengl.Display; и получаю такое же недоступное сообщение - этот ответ выглядит как самый близкий, который я могу найти, но я не понимаю, что экспорт сделать. Что мне вводить в поля Source module и Package? похоже, он не распознает lwjgl или что-то еще, что я пробовал.
Разобрался, мне нужно было включить строку requires lwjgl; в мой файл module-info.java: /
UIManager.createLookAndFeel - полезный способ получить ссылку на встроенный внешний вид.