Как использовать Java11 (Java10) с Eclipse Plugin? - PullRequest
0 голосов
/ 25 апреля 2018

Если я указываю JavaSE-10 в качестве минимальной среды выполнения в моем плагине Eclipse:

enter image description here

Я получаю следующие ошибки при запуске моего плагина в качестве приложения Eclipse:

enter image description here

org.osgi.framework.BundleException: Could not resolve module: org.treez.core [597]
  Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=10))"
  Unresolved requirement: Require-Bundle: org.treez.javafxd3; visibility:="reexport"
    -> Bundle-SymbolicName: org.treez.javafxd3; bundle-version="1.0.0.qualifier"; singleton:="true"
       org.treez.javafxd3 [586]
         Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=10))"

    at org.eclipse.osgi.container.Module.start(Module.java:444)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1613)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

Я проверил, что

  • Java10 доступен в Установленных JRE
  • 10выбран уровень соответствия

Я использую Oxygen.3a Release (4.7.3a) Идентификатор сборки: 20180405-1200

=> Это ошибка в равноденствии затмения?

=> Что еще я могу проверить, чтобы решить эту проблему?

enter image description here

Если я удалю JavaSE-10 из настроек минимальной среды выполнения, яв состоянии запустить приложение Eclipse, и плагин работает нормально.

При экспорте плагина появляется следующее предупреждение:

# 25.04.18, 12:25:40 MESZ
# Eclipse Compiler for Java(TM) v20180330-0919, 3.13.102, Copyright IBM Corp 2000, 2015. All rights reserved.
option -bootclasspath not supported at compliance level 9 and above

Когда я пытаюсь использовать плагин после его установки изНа моей странице обновления я получаю ClassNotFoundException:

...
Caused by: java.lang.ClassNotFoundException: org.treez.views.tree.TreeViewPart cannot be found by org.treez.views_1.0.0.201804191641
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:484)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:564)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    ... 114 more

Если я использую Java8, все работает нормально.

Смежные вопросы:

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Начиная с OSGi 4.3, наиболее подходящий способ указать минимальную версию Java - использовать заголовок Required-Capability, например:

Require-Capability: osgi.ee; filter: = "(& (osgi.ee = JavaSE) (version> = 1.10)) "

Мне удалось исправить сообщенную ошибку, заменив все вхождения Bundle-RequiredExecutionEnvironment указанной строкой.В PDE вы можете получить предупреждение о файле манифеста, но его можно смело игнорировать.Проверка продукта и экспорт продукта, кажется, работают без проблем.

Семантика заголовка BREE требует, чтобы дескриптор среды выполнения был предоставлен реализацией OSGi для каждого конкретного выпуска JRE.В Equinox это определялось в файлах ".profile";эти профили поддерживались Equinox вплоть до JavaSE-9, но было объявлено, что Equinox больше не будет предоставлять профили для более новых выпусков Java.

Сообщество Tycho решило эту проблему на своей стороне, создавих собственный профиль Java 10, но его нельзя использовать напрямую из PDE.Сообщество P2 рассматривает возможность копирования профиля Tycho Java 10, но это застопорилось в течение длительного времени.Я не уверен, как P2 реагирует в настоящее время, когда подаются пакеты, которые не содержат заголовок BREE.

0 голосов
/ 02 ноября 2018

Что работало для меня как обходной путь, так это

  • Удалите требуемые записи версии из файлов манифеста и проигнорируйте соответствующие предупреждения

  • Активируйте опцию «Использовать файлы классов, скомпилированные в рабочей области» в мастере экспорта:

enter image description here

(Поэтому я предполагаю, что что-то пойдет не так на этапе компиляции мастера экспорта, если эта опция не применяется.)

Я использовал Java 11.0.1 и Eclipse SimRel 2018-09 (плюс плагин поддержки Java11)

0 голосов
/ 25 апреля 2018

Похоже, Eclipse OSGi пока не поддерживает Java SE 10. Я скачал последнюю версию Eclipse Oxygen 4.7.3a и открыл плагины / org.eclipse.osgi_3.12.100.v20180210-1608.jar. Последним поддерживаемым профилем был JavaSE-9.

Итак, у вас есть два варианта:

  • Подождите, пока OSGi официально не поддержит профиль JavaSE-10.
  • Если вы действительно хотите написать плагин для Java 10 и у вас есть контроль над папкой плагинов (например, вы разрабатываете приложение Eclipse RCP), откройте jar OSGI и добавьте новый профиль JavaSE-10. Для этого вы можете скопировать JavaSE-9.profile в JavaSE-10.profile и исправить соответствующие строки в новом файле. Также вы должны добавить новую строку в profile.list.
...