我有一個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)併爲它提供補丁。它似乎將在下一個版本中得到修復。 –