在 Java 10 的 RCP 应用程序中未找到主机 plug-in JavaSE

Host plug-in JavaSE has not been found in RCP application with Java 10

我将我的 RCP 应用程序从 Eclipse Oxygen 移到了 Photon,也从 Java 8 移到了 Java 10。

如果我从 Eclipse 启动它,代码编译并且应用程序工作正常。但是,当我尝试构建我的应用程序时,出现错误:

plug-in JavaSE_0.0.0 has not been found
Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-10
    Host plug-in JavaSE_0.0.0 has not been found.

我在 Google 上找不到任何有用的解决方案。也许你们中的一些人可以帮助我。

我的清单文件包含这个 header:

Bundle-RequiredExecutionEnvironment: JavaSE-10

这似乎是一个 Eclipse 错误。 Eclipse 似乎无法正确处理 JavaSE-10。

目前最简单的解决方案就是使用 Bundle-RequiredExecutionEnvironment: JavaSE-9 而不是 JavaSE-10 并忍受与 JRE 容器不匹配的警告。

从 OSGi 4.3 开始,指定最低 Java 版本的最合适方法是使用 Required-Capability header,如:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version>=1.10))"

我已通过将所有出现的 Bundle-RequiredExecutionEnvironment 替换为以上行,成功修复了报告的错误。在 PDE 中,您可能会收到关于清单文件的警告,但可以安全地忽略它。产品验证和产品出口似乎没有问题。但是我不确定的一件事是当喂入不包含 BREE header.

的捆绑包时 P2 会如何反应

或者,Eclipse 2018-09 现已发布,似乎提供了 JavaSE-10 环境描述(正好赶上 JavaSE 10 弃用...);我还没有测试 JavaSE 11 支持(作为 Eclipse 2018-09 的插件提供)。