OSGI - Java 8 -> 9 迁移(需求能力问题)
Posted
技术标签:
【中文标题】OSGI - Java 8 -> 9 迁移(需求能力问题)【英文标题】:OSGI - Java 8 -> 9 migration (Require-Capability issue) 【发布时间】:2018-09-27 08:59:46 【问题描述】:我正在尝试将我们的 bnd(OSGI) 项目从 java 8 迁移到 9。第一次失败后,我准备了基本项目。但是,我遇到了 java 版本功能的问题,就像下面的一样(只是其中的一部分,但与 java 版本的区别都是相同的):
! Failed to start bundle org.apache.felix.gogo.command-1.0.2, exception
Could not resolve module: org.apache.felix.gogo.command [12]
Unresolved requirement: Import-Package: org.apache.felix.service.command; version="[1.0.0,2.0.0)"
-> Export-Package: org.apache.felix.service.command; bundle-symbolic-name="org.apache.felix.gogo.runtime"; bundle-version="1.0.0"; version="1.0.0"
org.apache.felix.gogo.runtime [2]
Unresolved requirement: Import-Package: org.osgi.service.event; version="[1.3.0,2.0.0)"; resolution:="optional"
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))"
org.osgi.framework.BundleException: Could not resolve module: org.apache.felix.gogo.command [12]
Unresolved requirement: Import-Package: org.apache.felix.service.command; version="[1.0.0,2.0.0)"
-> Export-Package: org.apache.felix.service.command; bundle-symbolic-name="org.apache.felix.gogo.runtime"; bundle-version="1.0.0"; version="1.0.0"
org.apache.felix.gogo.runtime [2]
Unresolved requirement: Import-Package: org.osgi.service.event; version="[1.3.0,2.0.0)"; resolution:="optional"
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))"
首先我所做的是更新所有依赖项 - 但没有帮助。 我用谷歌搜索了很多,但结果只有几个链接。 最接近问题的The one 无济于事 - 我添加了以下几行,但没有结果:
run.bndrun
Bundle-RequiredExecutionEnvironment: JavaSE-9
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,9"
也许升级我的 bnd gradle 插件会有所帮助,但是readme 中提到的 (4.0) 版本(我目前使用的是 3.5)在 mavenCentral
中不可用。
我的项目规范 - basic example repo
Eclipse Oxygen.3a Release (4.7.3a)
Bndtools 3.5.0.REL
Java 9.0.4+11
OSGI 6.0
Gradle 4.4
Gradle bnd plugin - 3.5
顺便说一句:如果您尝试在 Intellij 中运行项目,可能会出现问题 - 至少我们没有应对运行我们的主项目。
任何帮助将不胜感激,如果需要,我会尽力为您提供更多信息。
更新
即使我删除了几乎所有依赖项 (cleaned branch),在启动 run.bndrun
之后,我也只能收到
could not resolve the bundles: [project.main-1.0.0.201804171613 org.osgi.framework.BundleException: Could not resolve module: project.main [3]
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.8))"
]
Failed to start bundle project.main-1.0.0.201804171613, exception Could not resolve module: project.main [3]
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.8))"
project.main
是我唯一的捆绑包。
【问题讨论】:
【参考方案1】:正如我在 a comment 中提到的,我们依赖于 enroute 2.0,它提供了旧版本的 org.eclipse.osgi
。手动更新到3.13
后,Require-capability
的问题已经消失。
【讨论】:
【参考方案2】:Bnd 4.0 尚未发布。所以它目前不在 Maven 中心。
另外,您需要确保 Felix 框架的版本能够理解 Java 9 并能够正确提供 Java 9 ee。
【讨论】:
1) thx 第一个答案 - 我是this issue author.:) 2) 这可能是原因,但即使是我自己的包也抱怨 java 8 ...关于 felix - 我有检查org.apache.felix.gogo
- 至少maven 是相当新的......但我找不到任何关于java 9 支持的信息。不过,谢谢你的小费。
好的,我发现 Karaf 正在使用 felix,即使他们最近更新为 newest version。此外,Karaf 正在研究 java 9 - maybe not direct proof,但总是... 多说,main page felix creators 说,即。 Eclipse 依赖于 felix 所以...
我说的是 Felix OSGi 框架而不是 Felix gogo 包。
我在徘徊“你在跟我说什么”,因为我们不依赖于 felix osgi
- 我们正在使用包含在 enroute 中的实现 - 在版本 3.10 中使用 org.eclipse.osgi
- 2015 年。我已经手动更新为3.13 - 至少basic example 现在可以使用了。以上是关于OSGI - Java 8 -> 9 迁移(需求能力问题)的主要内容,如果未能解决你的问题,请参考以下文章
dpkg -i libequinox-osgi-java_3.8.1-8_all.deb
Java 8 & 缺少所需的能力 Require-Capability: osgi.ee;过滤器="(&(osgi.ee=JavaSE)(版本=1.8))"
使用 gradle 显示第一个 OSGi 构建 - 从 ant 迁移到 Gradle
Jetty 更新到 9.4.x 后:缺少约束:Require-Capability: osgi.extender;过滤器:=“(osgi.extender=osgi.serviceloader.pro