【问题标题】:How can I combine WAR packaging and OSGi bundle creation in Maven?如何在 Maven 中结合 WAR 打包和 OSGi 包创建?
【发布时间】:2010-12-08 06:18:05
【问题描述】:

我想部署一个带有 war 包结构的 OSGi 包,以便 Struts 将其识别为 Web 应用程序。我使用 Maven,所以我内置了 WAR 打包,并且我有 Maven 捆绑插件来为我创建 OSGi 兼容清单。

问题是,两者不能一起工作,所以捆绑插件不知道类文件现在在子文件夹classes/中,捆绑的jar在lib/中,所以它创建了一个错误的@ 987654324@ 标头。我可以手动将正确的标题添加到我的pom.xml,但我希望自动完成。我该怎么做?

【问题讨论】:

标签: java web-applications maven-2 osgi


【解决方案1】:

在 OPS4J Wiki 页面 -- "Getting the benefits of maven-bundle-plugin in other project types" 上描述了一种(或多或少)实现此目的的方法。

您可以在pom.xml 中配置依赖嵌入和Bundle-ClassPath 指令以匹配WAR 插件使用的位置。然后 maven-bundle-plugin 将生成正确的清单标头。

maven-bundle-plugin 的说明可能如下所示:

<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 目录,因为在执行 manifest 目标时,war 插件还没有创建它们(它只在稍后阶段运行)
  • 虽然对于实际的 web 应用程序没有意义,但 Bundle-ClassPath 指令必须包含“.”,否则捆绑插件会弄乱 Import-Packages 标头。我通过 Google 在一些 JIRA 问题中发现了这个问题,但我再也找不到 URL。

除此之外它工作正常。

【讨论】:

  • {maven-dependencies}+1(见felix.apache.org/site/…
  • 太棒了。我有点知道这一点,但我之前没有见过Embed-Directory 指令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多