如何在 Eclipse 插件中使用 Java11 (Java10)?
How to use Java11 (Java10) with Eclipse Plugin?
如果我在我的 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 在 Installed JREs
下受到尊重
- 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 一切正常。
相关问题:
Java 8 & Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))"
看起来 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 配置文件。
- 如果你真的想用 Java10 编写一个插件并且你可以控制插件文件夹(例如你开发一个 Eclipse RCP 应用程序),打开 OSGI jar 并添加一个新的配置文件 JavaSE-10。为此,您可以将 JavaSE-9.profile 复制到 JavaSE-10.profile 并修复新文件中的相应行。此外,您必须在 profile.list.
中添加一个新行
从 OSGi 4.3 开始,指定最低 Java 版本的最合适方法是使用 Required-Capability header,如:
Require-Capability: osgi.ee;过滤器:="(&(osgi.ee=JavaSE)(版本>=1.10))"
我已通过将所有出现的 Bundle-RequiredExecutionEnvironment 替换为以上行,成功修复了报告的错误。在 PDE 中,您可能会收到关于清单文件的警告,但可以安全地忽略它。产品验证和产品导出似乎没有问题。
BREE 的语义header 要求 OSGi 实现为 JRE 的每个特定版本提供一个执行环境描述符。在 Equinox 中,这过去是通过“.profile”文件定义的; Equinox 在 JavaSE-9 之前支持这些配置文件,但已经宣布 Equinox 将不再为 Java.
的较新版本提供配置文件
Tycho 社区已经通过创建他们自己的 Java10 配置文件解决了这个问题,但不能直接从 PDE 使用。 P2 社区正在考虑复制 Tycho 的 Java10 配置文件,但这已经搁置了很长时间。我不确定当喂入不包含 BREE header.
的捆绑包时,P2 目前如何反应
对我有用的解决方法是
从清单文件中删除所需的版本条目并忽略相应的警告
在导出向导中激活选项"Use class files compiled in the workspace":
(因此,如果未应用该选项,我假设在导出向导的编译步骤中出现问题。)
我使用了 Java 11.0.1 和 Eclipse SimRel 2018-09(加上 Java11 支持插件)
如果我在我的 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 在 Installed JREs 下受到尊重
- 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 一切正常。
相关问题:
Java 8 & Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))"
看起来 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 配置文件。
- 如果你真的想用 Java10 编写一个插件并且你可以控制插件文件夹(例如你开发一个 Eclipse RCP 应用程序),打开 OSGI jar 并添加一个新的配置文件 JavaSE-10。为此,您可以将 JavaSE-9.profile 复制到 JavaSE-10.profile 并修复新文件中的相应行。此外,您必须在 profile.list. 中添加一个新行
从 OSGi 4.3 开始,指定最低 Java 版本的最合适方法是使用 Required-Capability header,如:
Require-Capability: osgi.ee;过滤器:="(&(osgi.ee=JavaSE)(版本>=1.10))"
我已通过将所有出现的 Bundle-RequiredExecutionEnvironment 替换为以上行,成功修复了报告的错误。在 PDE 中,您可能会收到关于清单文件的警告,但可以安全地忽略它。产品验证和产品导出似乎没有问题。
BREE 的语义header 要求 OSGi 实现为 JRE 的每个特定版本提供一个执行环境描述符。在 Equinox 中,这过去是通过“.profile”文件定义的; Equinox 在 JavaSE-9 之前支持这些配置文件,但已经宣布 Equinox 将不再为 Java.
的较新版本提供配置文件Tycho 社区已经通过创建他们自己的 Java10 配置文件解决了这个问题,但不能直接从 PDE 使用。 P2 社区正在考虑复制 Tycho 的 Java10 配置文件,但这已经搁置了很长时间。我不确定当喂入不包含 BREE header.
的捆绑包时,P2 目前如何反应对我有用的解决方法是
从清单文件中删除所需的版本条目并忽略相应的警告
在导出向导中激活选项"Use class files compiled in the workspace":
(因此,如果未应用该选项,我假设在导出向导的编译步骤中出现问题。)
我使用了 Java 11.0.1 和 Eclipse SimRel 2018-09(加上 Java11 支持插件)