如果我在我的Eclipse插件中将JavaSE-10指定为最小执行环境:
在启动我的插件作为Eclipse Application时出现以下错误:
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)
我查了一下
我使用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,一切正常。
相关问题:
答案 0 :(得分:1)
看起来Eclipse OSGi还不支持Java SE 10。我下载了最新的Eclipse Oxygen 4.7.3a并打开了plugins / org.eclipse.osgi_3.12.100.v20180210-1608.jar。最后支持的配置文件是JavaSE-9。
所以,你有两个选择:
答案 1 :(得分:0)
从OSGi 4.3开始,指定最低Java版本的最合适方法是使用Required-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配置文件,但这已经停滞了很长时间。我不确定当馈入不包含BREE标头的捆绑包时,P2目前如何反应。
答案 2 :(得分:0)