Чтобы иметь возможность использовать мой плагин Eclipse «treezCore» также в качестве модуля Java9, я создал module-info.java в своей папке src.
Кроме того, я переместил зависимости подключаемых модулей из пути к классам в путь к модулям. Я вижу модуль "org.eclipse.swt.3.106.1.v20170926" в зависимостях плагина:
Однако я не могу сослаться на этот модуль в моем модуле-info.java. Я пытался
require org.eclipse.swt.3.106.1.v20170926;
require org.eclipse.swt;
require swt;
Ни один из этих вариантов не сработал. Файл jar \plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar, используемый Eclipse, не содержит определения модуля и
jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d
говорит, что дескриптор модуля не может быть получен. Также см
Не удалось получить дескриптор модуля для автоматически сгенерированные имена модулей в Java 9?
Если я загружу более новую версию swt.jar из
Я получаю следующий вывод, который выглядит многообещающе:
swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.gdip
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.mozilla
contains org.eclipse.swt.internal.mozilla.init
contains org.eclipse.swt.internal.ole.win32
contains org.eclipse.swt.internal.opengl.win32
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.internal.win32
contains org.eclipse.swt.layout
contains org.eclipse.swt.ole.win32
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets
Я также завишу от org.eclipse.jface и не смог найти для него отдельную загрузку.
=> Мне действительно нужно ждать новой версии Eclipse, в которой используются новые версии плагинов, включая определения модулей?
Или я могу как-то ссылаться на старую версию swt из папки плагинов, даже если она не включает определение модуля? Я искал простой способ определить псевдоним или резервную зависимость, например.
requires ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar as 'org.eclipse.swt'
or
requires org.eclipse.swt fallback ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar
но module-info.java, похоже, не поддерживает такой синтаксис.
У меня есть около 20 зависимостей плагинов, и я не хочу вручную загружать каждую из них (если это возможно) и включать их как внешний файл jar. Я также не хочу взламывать отдельные файлы манифеста/jar в папке плагина Eclipse. Есть много файлов jar, которые мне нужно изменить, и обновление Eclipse сломает этот хак.
Я использую Eclipse для разработчиков RCP и RAP, версия: Oxygen.1a Release (4.7.1a), идентификатор сборки: 20171005-1200.
Изменить
При использовании Версия: Photon Milestone 4 (4.8.0M4) Идентификатор сборки: 20171214-1849 ошибка в module-info.java исчезает при использовании
требуется org.eclipse.swt;
и наличие зависимостей подключаемых модулей в пути к модулям.
Однако мой импорт еще не работает, см. Следующее изображение. Если я перенесу зависимости подключаемых модулей из Modulepath в Classpath, импорт будет работать, но ошибка в module-info.java появится снова.
Я создал минимальный пример в
https://github.com/stefaneidelloth/Java9EclipsePluginExample/tree/master/MyPlugin
и я подал отчет об ошибке в
https://bugs.eclipse.org/bugs/show_bug.cgi?id=529089
Связанные вопросы:
jar --file org.eclipse.swt.3.106.1.v20170926.jar -d
ничего не раскрывает? - person Alan Bateman   schedule 12.12.2017