2009-10-20 66 views
8

我想用一個war包結構部署我的一個OSGi包,以便它被Struts識別爲一個Web應用程序。我使用Maven,所以我得到了內置的WAR包裝,並且我有Maven捆綁插件爲我創建了兼容OSGi的清單。如何在Maven中將WAR包和OSGi包創建結合起來?

的問題是,兩人不在一起工作,所以捆綁插件是不知道的類文件現在在子文件夾classes/和捆綁的罐子在lib/,所以它創建了一個錯誤的Bundle-classpath頭。我可以手動將正確的標題添加到我的pom.xml,但我希望能夠自動完成。我怎樣才能做到這一點?

+0

[Maven Web Project with Apache Felix Plugin]的可能重複](https://stackoverflow.com/questions/19272627/maven-web-project-with-apache-felix-plugin) – bigbadmouse 2017-07-20 13:45:04

回答

18

OPS4J維基頁面 - "Getting the benefits of maven-bundle-plugin in other project types"描述了一種達到此目的的方法(或多或少)。

您可以在您的pom.xml中配置依賴關係嵌入和Bundle-ClassPath指令以匹配WAR插件使用的位置。 maven-bundle-plugin將會生成正確的清單頭文件。

Maven的束-插件的說明可能是這樣的:

<instructions> 
    <Bundle-ClassPath>.,WEB-INF/classes,{maven-dependencies}</Bundle-ClassPath> 

    <Embed-Directory>WEB-INF/lib</Embed-Directory> 
    <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
    <Embed-Transitive>true</Embed-Transitive> 
    <!-- ... --> 
</instructions> 

ETA:使用此方法時,我發現了兩個值得注意的事情:

  • 的bundle插件會抱怨缺少WEB-INF目錄,因爲當清單目標被執行時,war插件還沒有創建它們(它只運行在la ter階段)
  • 雖然它對於實際的webapp沒有意義,Bundle-ClassPath指令必須包含「。」,否則捆綁插件會搞亂Import-Packages標頭。我通過Google在一些JIRA問題中發現了這一點,但我無法再找到該URL。

除此之外,它工作正常。

+0

+1 {'maven-依賴關係}'(見http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html#ApacheFelixMavenBundlePlugin%28BND%29-Embeddingdependencies) – 2009-10-20 13:49:42

+0

太好了。我有點知道這一點,但我以前沒有見過'Embed-Directory'指令。 – 2009-10-20 19:42:26

-1

你可能會發現this answer有啓發,因爲OP也發佈了他自己找到的同樣問題的答案。

他提供了一個包含web風格內容的解決方案。

+2

歡迎您訪問解決方案的鏈接,但請確保您的答案在沒有它的情況下很有用:[在鏈接附近添加上下文](// meta.stackexchange.com/a/8259),以便您的同行用戶瞭解它是什麼以及爲什麼它在那裏,然後引用您鏈接的頁面中最相關的部分,以防目標頁面不可用。 [僅僅是一個鏈接的答案可能會被刪除。](// stackoverflow.com/help/deleted-answers) – Bugs 2017-07-20 08:15:17

+0

你知道嗎?我今後不打擾。任何熱心,我貢獻(而不是隻是默默地接受幫助,沒有回報)今天已經完全蒸發 – bigbadmouse 2017-07-20 13:07:24

+0

如何?如果因爲有人提出簡單的改進要求而放棄一切,你的熱情似乎並不那麼好。你對高質量的答案不感興趣嗎?你可能想重新考慮這一點。 – Floern 2017-07-20 13:15:06