2012-12-05 81 views
2

所以我在我的POM是這樣的:從行家回購的地方,並把它放在我的Maven依賴文件夾爲什麼MANIFEST.MF不能從Maven的pom中看到包?

<dependency> 
    <!-- jsoup HTML parser library @ http://jsoup.org/ --> 
    <groupId>org.jsoup</groupId> 
    <artifactId>jsoup</artifactId> 
    <version>1.7.1</version> 
</dependency> 

它取jsoup-1.7.1.jar

現在我可以在我的代碼中使用它(Eclipse不抱怨),但是當我嘗試把一個依賴於它在我的MANIFEST.MF文件:

Import-Package: org.osgi.framework, org.jsoup, org.jsoup.nodes 

Eclipse的不斷抱怨說:

No available bundle exports package 'org.jsoup.nodes' 
No available bundle exports package 'org.jsoup' 

有人可以向我解釋爲什麼會發生這種情況嗎? (我很好奇在確定MANIFEST.MF看到的過程)

回答

2

當您使用eclipse PDE時,您必須創建一個包含所有必需包的目標平臺。正常的依賴關係解決方案不與目標平臺耦合。所以你必須將每個依賴添加到maven pom和目標平臺。

Btw。如果您正在開發基於服務器的OSGi項目,則最好不要使用PDE。你也可以使用maven bundle插件創建bundle。它會分析您執行的導入並自動創建清單。在大多數情況下,這比PDE清單的第一種方式好得多,並且它對maven更好。

參見:http://www.liquid-reality.de/display/liquid/2011/02/15/Karaf+Tutorial+Part+1+-+Installation+and+First+application

+0

謝謝,但我已經有一個目標平臺定義的,而我卻沒有認爲我需要爲它添加每個依賴項......但是可以想到它 - 這是有道理的。但我仍然不明白爲什麼我的「插件」清單不能只使用maven提取的jar中的交互文件。這個「maven-bundle」插件做了什麼,這使得這個工作?它不能僅生成清單 - 因爲我已經有清單並且不起作用。 – drozzy

+0

我也意識到我無法真正把它放到目標平臺上,因爲它沒有更新站點或任何類型的東西。所以我基本上必須下載jar,將它放到目錄中,然後將該目錄放置在我的Target Runtime中......這種否定整個Maven優勢。只是想... – drozzy

+0

基本上你在這個過程中有兩個步驟。一步就是創建Manifest文件。這是Maven捆綁軟件插件可以提供幫助的地方。第二步是OSGi框架內的依賴關係解析。在PDE eclipse中使用目標平臺進行此操作。如果你不使用PDE(就像在我的教程中那樣),那麼OSGi依賴關係解析僅在OSGi服務器中發生,就像我在這個案例中的Apache Karaf一樣。當然,這仍然意味着你必須在Karaf中提供所有的依賴關係,但是Karaf可以使用Maven依賴關係,以便更好地匹配。 –

相關問題