我有一个OSGI软件包依赖于通过功能公开的软件包。我依赖的 软件包需要特定版本的软件包,比如com.company.antlr.runtime (3.0.1)
。该功能将打包两个版本,即com.company.antlr.runtime (3.0.1)
和com.company.antlr.runtime (3.2.0)
。基于Eclipse功能的启动无法解决依赖关系
的问题是,当我提出在Eclipse中基于特征的启动配置与我的包(以一个功能)以及包含我靠包装上的功能,我得到一个丢失的约束 验证错误,指出需要捆绑com.company.antlr.runtime(3.0.1)
缺少 。
添加com.company.antlr.runtime (3.0.1)
作为捆绑功能启动没有效果,我仍然得到相同的验证错误。
另一方面,如果我进行基于捆绑的启动配置,其中包含与特征中包装的完全相同的 捆绑包,则不存在验证问题。
的问题可以用这个最小的例子来说明:
束org.example.examplebundle
具有清单:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name:Examplebundle
Bundle-SymbolicName: org.example.examplebundle
Bundle-Version:1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.company.antlr.runtime;bundle-version="[3.0.1,3.0.1]"
和特征org.example.examplefeature
具有feature.xml的:
<feature
id="org.example.examplefeature"
label="Examplefeature"
version="1.0.0.qualifier">
<plugin
id="org.eclipse.osgi"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.example.examplebundle"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.0.1"
unpack="false"/>
<plugin
id="com.company.antlr.runtime"
download-size="0"
install-size="0"
version="3.2.0"
unpack="false"/>
</feature>
制作仅使用此功能的基于功能的启动将导致验证错误。 使用该功能中包含的四个软件包进行基于软件包的启动不会导致验证错误。
然后,我尝试添加必要的捆绑软件以使用控制台,并从org.example.examplefeature
功能中删除软件包org.example.examplebundle
,然后使用基于功能的启动运行它。然后我发现捆绑com.company.antlr.runtime (3.0.1)
根本没有启动。
如果我将相同的必要捆绑添加到基于捆绑的发布中,我可以观察到com.company.antlr.runtime (3.0.1)
和com.company.antlr.runtime (3.2.0)
都处于活动状态。
我在此基础上的猜测是,基于功能的启动的解析程序得出结论认为,版本号最高的软件包是足够的,因此根本不启动旧版本。
考虑到这一假设,我想在我需要一个完美的匹配 为com.company.antlr.runtime (3.0.1)
通过包括在feature.xml下面的代码片段的feature.xml的明确规定:
<requires>
<import
plugin="com.company.antlr.runtime"
version="3.0.1"
match="perfect"
/>
</requires>
但是,唉,无济于事。
所以,我现在的问题是:有没有办法解决这个问题,同时保持基于功能的启动?
为了完整性:我运行Eclipse 4.3开普勒和OSGi 3.8.1
Rikke,你最终找到解决方案吗? –
不,不是真的。最后,我们必须更新所有内容以使用最新版本的antlr,以便我们不再需要该版本的两个版本。幸运的是,这在合理的时间内是可行的。这可能并非总是如此! –
我在Eclipse中发现了一个错误[产品验证找不到需要两个版本的插件](https://bugs.eclipse.org/bugs/show_bug.cgi?id=367187)并为它提供补丁。它似乎将在下一个版本中得到修复。 –