我正在开发一个在我们的Domino 9.0.1 FP8服务器上使用的OSGi插件。 由于服务器支持Java 8并且我有一些Java 8代码,我添加了:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
<{1>}中的。
但是,当我尝试加载插件时,它仍然处于MANIFEST.MF
状态:
INSTALLED
运行诊断程序显示执行环境不可用:
tell http osgi ss com.test.api.plugin
Framework is launched.
id State Bundle
19 INSTALLED com.test.api.plugin_0.1.0.201706241509
为了确定,我仔细检查了Java版本:
tell http osgi diag com.test.api.plugin
initial@osginsf:apps.nsf/0D3C92BFD9106A9DC125814900535ABD/com.test.api.plugin_0.1.0.201706241509.jar [19]
Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.8
所以,一切似乎都井然有序,但插件不会加载。
如果我将所需的执行环境更改为JavaSE-1.6,或者如果我从show jvm
JVM: Java Virtual Machine initialized.
Java runtime version: pwa6480sr3fp22-20161213_02 (SR3 FP22)
JVM version: JRE 1.8.0 Windows 8 amd64-64 Compressed References 20161209_329148 (JIT enabled, AOT enabled) J9VM - R28_20161209_1345_B329148 JIT - tr.r14.java.green_20161207_128946 GC - R28_20161209_1345_B329148_CMPRSS J9CL - 20161209_329148
中删除该行,则插件会加载并正常工作。
我的临时解决方案是从MANIFEST.MF
完全删除该行,因为如果将执行环境更改为JavaSE-1.6,Java 8代码将无法编译。
所以我有一个有效的解决方案,但我想知道问题是什么,以及是否有更好的解决方法。
我注意到的另一件事:我通常使用Maven来构建插件,但如果我尝试使用MANIFEST.MF
从Eclipse导出插件,我会收到以下错误:
Export > Deployable plug-ins and fragments
切换到JavaSE-1.6甚至可以在这里帮助正确导出插件。
这可能是OSGi版本问题而不是Java问题吗?
我似乎记得在FP9中应该有一个OSGi更新。那么这有可能解决吗?
答案 0 :(得分:1)
据我所知,其原因确实是你在最后提到的:它是OSGi堆栈。虽然底层运行时是Java 8,但IBM根本没有更新OSGi堆栈(除非我猜测这是必需的),这包括它不知道它在Java 8运行时。假设FP9确实通过OSGi更新到达,那么应该可以清理它。
与此同时,我一直在做同样的事情:从清单中删除行并处理警告(我使用Maven构建来一直生成更新站点,习惯,所以没有碰到第二个错误。)