Jmi*_*ini 34 eclipse osgi eclipse-plugin equinox java-8
我使用Eclipse Luna win32.x86_64运行Java 8.
这里来自Help Menu > About > Installation Detail > Configuration Tab
:
java.runtime.version=1.8.0_05-b13
java.version=1.8.0_05
Run Code Online (Sandbox Code Playgroud)
我创建了新的插件项目,请求JavaSE-1.8
作为执行环境:
在myplugin/META-INF/MANIFEST.MF
我的文件当然:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Run Code Online (Sandbox Code Playgroud)
我在产品文件中使用此插件.当我尝试验证它时,我收到以下错误:
当然,如果我开始使用该产品,我会得到:
!ENTRY org.eclipse.osgi 2 0 2014-07-10 08:14:22.042
!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
!SUBENTRY 1 org.eclipse.osgi 2 0 2014-07-10 08:14:22.043
!MESSAGE Bundle update@********/myplugin/ was not resolved.
!SUBENTRY 2 myplugin 2 0 2014-07-10 08:14:22.044
!MESSAGE Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
Run Code Online (Sandbox Code Playgroud)
我试过验证了很多:
首选项> Java>已安装的JRE
首选项> Java>已安装的JRE>执行环境
首选项> Java>编译器:JDK合规性编译器合规性级别
当我启动产品时,我在Launching选项卡中检查了我使用jre8作为执行环境.
我甚至试图改变Java Runtime Environment
在Run Configurations
对话框:
我尝试了不同的设置.它们都不起作用.
怎么了?
这是一个已知的问题吗?
Chr*_*der 22
该错误意味着您的捆绑包Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))"
在其清单中有一个条目.所以这意味着捆绑包只会在有一个提供此功能的捆绑包时启动.
在osgi.ee功能的情况下,应该提供此功能的OSGi框架(equinox).显然它没有这样做.
因此,一种方法是从捆绑Manifest中删除标头.另一种方法是使昼夜平分点出口能力.也许您可以尝试使用最新的昼夜平分点版本.不确定这是否有帮助.您也可以尝试设置框架属性(使用-D):org.osgi.framework.system.capabilities = osgi.ee; osgi.ee = "JavaSE的";版本:列表= "1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8"
看到
小智 19
分享我基于Juno 3.8.2改造目标平台的经验,用Bundle-RequiredExecutionEnvironment
("BREE")运行JUnit插件测试JavaSE-1.8
:
org.eclipse.osgi
使用Provide-Capability
清单中的标头创建片段:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: FrwJava8Support
Bundle-SymbolicName: frwJava8Support
Bundle-Version: 1.0.0.qualifier
Fragment-Host: org.eclipse.osgi;bundle-version="3.8.2"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Provide-Capability: osgi.ee;osgi.ee="JavaSE";version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8"
Run Code Online (Sandbox Code Playgroud)
这种能力从未被提升过.
使用-Dorg.osgi.framework.system.capabilities
Christian的回答中概述的内容.
首先,必须正确引用该论点:
-Dorg.osgi.framework.system.capabilities="osgi.ee; osgi.ee=\"JavaSE\";version:List=\"1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8\""
Run Code Online (Sandbox Code Playgroud)
这种方法可能适用于除了以外的任何其他用例pde.junit
.我仍然有这个(略有不同)的例外:
!MESSAGE Bundle com.XXX.tst.frw.common_1.0.0.qualifier [92] was not resolved.
!SUBENTRY 2 com.XXX.tst.frw.common 2 0 2015-04-18 13:43:55.336
!MESSAGE Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.8
!SUBENTRY 1 org.eclipse.osgi 2 0 2015-04-18 13:43:55.336
!MESSAGE Bundle com.XXX.tst.frw.common.test_1.0.0.qualifier [101] was not resolved.
!SUBENTRY 2 com.XXX.tst.frw.common.test 2 0 2015-04-18 13:43:55.336
!MESSAGE Missing host com.XXX.tst.frw.common_1.0.0.
!ENTRY org.eclipse.osgi 4 0 2015-04-18 13:43:55.336
!MESSAGE Application error
!STACK 1
java.lang.IllegalArgumentException: Bundle "com.XXX.tst.frw.common" not found. Possible causes include missing dependencies, too restrictive version ranges, or a non-matching required execution environment.
at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.getClassLoader(RemotePluginTestRunner.java:77)
Run Code Online (Sandbox Code Playgroud)
修补org.eclipse.osgi
捆绑包括Luna的JavaSE-1.8.profile
.
将文件复制<LUNA>\plugins\org.eclipse.osgi_3.10.1.v20140909-1633.jar\JavaSE-1.8.profile
到目标平台捆绑包的org.eclipse.osgi
捆绑包.
(例如<myworkspace>\.metadata\.plugins\org.eclipse.pde.core\.bundle_pool\plugins\org.eclipse.osgi_3.8.2.v20130124-134944.jar\JavaSE-1.8.profile
)
参考配置文件profile.list
(实际上,这似乎是可选的):
添加JavaSE-1.8.profile,\
到 .metadata\.plugins\org.eclipse.pde.core\.bundle_pool\plugins\org.eclipse.osgi_3.8.2.v20130124-134944.jar\profile.list
但是,此解决方案需要托管您自己的包含org.eclipse.osgi
捆绑包的P2存储库,或者将补丁应用于每个工作区的捆绑池.
仍然有可能将BREE保持在与现有org.eclipse.osgi
3.8.2版本兼容的"JavaSE-1.7" .
我目前意识到两个缺点:
据推测,PDE会评估BREE并相应地设置编译器源级别,然后为Java 8源生成"1.7".其他PDE功能(功能导出,产品导出)可能会出现同样的问题.
使用Eclipse Tycho,可以手动覆盖javac源代码级别,而不是评估bundle的BREE(选择要编译的JDK).但是,Tycho仍然匹配给定的源级别与BREE,并拒绝编译Java 8代码(使用Tycho 0.22测试).
此外,方法2很可能不适用于PDE的bundle导出,至少我不知道有任何传递VM参数的可能性.
我们采用方法3并成功修补了我们的目标平台,将Java 8与Eclipse 3.8一起使用.
由于我们已经使用所有基于3.8的Eclipse插件维护自己的P2存储库,因此我们需要:
org.eclipse.osgi
(需要从bundle中剥离签名信息)org.eclipse.rcp
使用更新的org.eclipse.osgi
捆绑包修补功能如果您维护自己的P2存储库以提供自定义目标平台而不是使用任何基于Eclipse.org的更新站点,则可以使Eclipse 3.8与Java 8一起使用.
参考资料:Eclipse Bug支持osgi.ee
归档时间: |
|
查看次数: |
37072 次 |
最近记录: |