OSGI - Java 8 - > 9迁移(需求能力问题)

时间:2018-04-17 11:50:26

标签: java-8 osgi java-9 bndtools

我正在尝试将我们的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))"

首先,我所做的是更新所有依赖项 - 但没有帮助。 我搜索了很多,但只产生了一些链接。 最接近问题的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插件会有所帮助,但mavenCentral无法在readme提及{4.0}提及的版本(我目前正在使用3.5)。

我的项目规范 - 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
BTW:如果你试图在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是我唯一的捆绑。

2 个答案:

答案 0 :(得分:3)

Bnd 4.0尚未发布。所以它目前不在maven中心。

此外,您需要确保Felix框架的版本了解Java 9并且可以正确地提供Java 9 ee。

答案 1 :(得分:2)

正如我在a comment中提到的,我们对enroute 2.0有了依赖性,它提供了org.eclipse.osgi的旧版本。手动更新3.13Require-capability的问题已消失。