我正在尝试将我们的bnd(OSGI)项目从java 8迁移到9。第一次失败后,我已经准备好了基本项目。但是,我遇到了java版本功能的问题,就像bellow一样(只是其中的一部分,但都与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))"
首先,我所做的是更新所有依赖项 - 但没有帮助。 我用谷歌搜索了很多,但只产生了几个链接。 最接近问题的那个没有帮助思考 - 我添加了以下行,但没有结果:
运行.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 插件会有所帮助,但是自述文件中提到的 (4.5) 版本 (4.5) 在mavenCentral
中不可用。
我的项目规范 - 基本示例存储库
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中运行项目,可能会出现问题 - 至少我们没有应付运行我们的主项目。
任何帮助将不胜感激,如果需要,我将尽力为您提供更多信息。
更新
即使我删除了几乎所有依赖项(清理分支),启动后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
是我唯一的捆绑包。
Bnd 4.0 尚未发布。所以它目前不在 maven 中心。
此外,您需要确保Felix框架的版本能够理解Java 9,并且可以正确提供Java 9 ee。
正如我在评论中提到的,我们有 enroute 2.0 的 dedpendency ,它提供了旧版本的org.eclipse.osgi
.手动更新后3.13
Require-capability
问题消失了。