【问题标题】:How to use Java11 (Java10) with Eclipse Plugin?如何将 Java 11 (Java 10) 与 Eclipse 插件一起使用?
【发布时间】:2018-10-05 18:31:01
【问题描述】:

如果我在我的 Eclipse 插件中指定 JavaSE-10 作为最小执行环境:

将插件作为 Eclipse 应用程序启动时出现以下错误:

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) Build id: 20180405-1200

=>这是 Eclipse Equinox 中的错误吗?

=>我还可以检查什么来解决这个问题?

如果我从最低执行环境设置中删除 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,一切正常。

相关问题:

【问题讨论】:

  • 我也见过这个。据我所知,这是一个错误。
  • bootclasspath 错误是一个单独的错误报告here

标签: eclipse eclipse-plugin java-10


【解决方案1】:

解决方法对我有用的是

  • 从清单文件中删除所需的版本条目并忽略相应的警告

  • 在导出向导中激活“使用工作区中编译的类文件”选项:

(因此,如果未应用该选项,我假设在导出向导的编译步骤中出现问题。)

我使用 Java 11.0.1 和 Eclipse SimRel 2018-09(加上 Java11 支持插件)

【讨论】:

    【解决方案2】:

    自 OSGi 4.3 起,指定最低 Java 版本的最合适方法是使用 Required-Capability 标头,如下所示:

    要求能力:osgi.ee;filter:="(&(osgi.ee=JavaSE)(version>=1.10))"

    通过将所有出现的 Bundle-RequiredExecutionEnvironment 替换为上述行,我已成功修复报告的错误。在 PDE 中,您可能会在清单文件中收到警告,但可以放心地忽略它。产品验证和产品导出似乎没有问题。

    BREE 标头的语义要求 OSGi 实现为 JRE 的每个特定版本提供一个执行环境描述符。在 Equinox 中,这曾经是通过“.profile”文件定义的;在 JavaSE-9 之前,Equinox 已支持这些配置文件,但已宣布 Equinox 将不再为较新版本的 Java 提供配置文件。

    Tycho 社区已通过创建自己的 Java 10 配置文件来解决此问题,但不能直接从 PDE 中使用。 P2 社区正在考虑复制 Tycho 的 Java 10 配置文件,但这已经停滞了很长时间。我不确定 P2 目前在馈送不包含 BREE 标头的捆绑包时会如何反应。

    【讨论】:

    • 用 Java11 试过了,这对我没有帮助。清单文件中仍然有一个警告,我仍然得到一个 ClassNotFoundException Caused by: java.lang.ClassNotFoundException: org.treez.views.properties.PropertyViewPart cannot be found by org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass (EquinoxBundle.java:612) 在 org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:180) ... 117 更多
    【解决方案3】:

    Eclipse OSGi 似乎还不支持 Java SE 10。我下载了最新的 Eclipse Oxygen 4.7.3a 并打开了 plugins/org.eclipse.osgi_3.12.100.v20180210-1608.jar。最后支持的配置文件是 JavaSE-9。

    所以,你有两个选择:

    • 等到 OSGi 正式支持 JavaSE-10 配置文件。
    • 如果你真的想用 Java 10 编写插件并且你可以控制插件文件夹(例如你开发一个 Eclipse RCP 应用程序),打开 OSGI jar 并添加一个新的配置文件 JavaSE-10。为此,您可以将 JavaSE-9.profile 复制到 JavaSE-10.profile 并修复新文件中的相应行。此外,您必须在 profile.list 中添加一个新行。

    【讨论】:

    • 可能是 Eclipse 错误533731
    猜你喜欢
    • 2020-11-17
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多