在我的OSGi环境中安装新版本的Groovy会使我的捆绑包导入它,尽管它不应该
我有一个小捆绑包,使用Groovy来解释脚本。
清单导入包指令如下所示:
Import-Package: groovy.util;version="[1.8,2)"
上面的版本范围明确指出导入版本必须介于 1.8(含)和 2.0(独占)之间。
当我在仅安装了Groovy 1.8.6的OSGi环境中运行此捆绑包时,它按预期工作...当我键入时,它会打印:inspect package requirement 4
-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]
groovy.util; version=1.8.6 -> groovy-all [5]
这完全符合我的预期,当我要求CodeRunner解释这个Groovy片段时:
GroovySystem.version
它正确返回 。1.8.6
现在,当我同时启动安装了Groovy 1.8.6和2.3.3的OSGi环境时,当我检查捆绑包的软件包时,我得到的却是:
-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]
导入已经消失了(当然,即使清单仍然有它)!现在,当我运行时,我得到了2.3.3,而不是1.8.6!groovy.util
GroovySystem.version
这是疯狂的东西,似乎只是一个新版本的Groovy存在的事实打破了OSGi的承诺,即我应该能够使用我想要的任何版本的依赖项。
我已经在Felix和Equinox中对此进行了测试,结果完全相同。
我还在清单中使用了确切的版本而不是范围,但这并没有改变任何东西。
有谁能看到这里到底发生了什么??
PS.如果你不相信我,试试你自己,这是GitHub上的项目:https://github.com/renatoathaydes/osgi-run/tree/next/osgi-run-test/ipojo-dosgi