Java 在我的OSGi环境中安装新版本的Groovy会使我的bundle导入它,尽管它不应该';T

Java 在我的OSGi环境中安装新版本的Groovy会使我的bundle导入它,尽管它不应该';T,java,groovy,osgi,Java,Groovy,Osgi,我有一个使用Groovy解释脚本的小软件包 清单导入包指令如下所示: Import-Package: groovy.util;version="[1.8,2)" 上述版本范围明确规定导入版本必须介于1.8(含)和2.0(不含)之间 当我在只安装Groovy 1.8.6的OSGi环境中运行此捆绑包时,它会按预期工作。。。当我键入检查包装要求4时,它会打印: -> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports package

我有一个使用Groovy解释脚本的小软件包

清单导入包指令如下所示:

Import-Package: groovy.util;version="[1.8,2)"
上述版本范围明确规定导入版本必须介于1.8(含)和2.0(不含)之间

当我在只安装Groovy 1.8.6的OSGi环境中运行此捆绑包时,它会按预期工作。。。当我键入检查包装要求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]
groovy.util
导入已不存在(当然,即使清单中仍然有它)!现在,当我运行
GroovySystem.version
时,我得到的是2.3.3,而不是应该的1.8.6

这是一个疯狂的东西,Groovy新版本的出现似乎打破了OSGi的承诺,即我应该能够使用我想要的任何版本的依赖项

我已经在Felix和Equinox测试过了,结果完全一样

我还在清单中使用了一个精确的版本,而不是一个范围,但这并没有改变任何事情

有人能看到这里到底发生了什么吗


注:如果你不相信我,请自己试试,下面是GitHub上的项目:

不要使用版本范围。显式设置groovy.util的版本
这似乎没有什么帮助,但我相信它会起作用。当我们试图在具有版本范围的依赖项上生成Karaf features.xml文件时,会遇到一个非常类似的问题(我们通过编写自己的插件来解决这个问题,该插件从完成的功能文件中删除了较高版本的项:()

我签出了该项目并快速查看了一下,但gradle在找到ipojo插件时遇到了问题。也许您可以添加一些构建捆绑包的说明?您是否检查了jar中的实际MANIFEST.MF?您好。ipojo插件在JCenter上可用,您需要将JCenter()repo添加到builscript存储库列表中(请参阅)。我查看了MANIFEST.MF,是的。我一直在查看它,因为我希望这是实际OSGi环境的唯一信息来源……但在我的情况下,似乎发生了其他事情。您尝试过[1.8,2.0]吗作为版本范围?您是否看到OSGI容器中安装了这两个依赖项?您的日志中是否有任何错误?您好,谢谢您的回答,但我在问题接近结尾时提到,我尝试在清单中使用确切的版本,但它不起作用。我会尽快回到这个问题上,因为有很多人都对这个问题投了赞成票,所以似乎有人对此感兴趣(早些时候,我获得了这一个模糊的问题徽章!)