java - 我如何在 Maven 中结合 WAR 打包和 OSGi 包创建?

标签 java web-applications maven-2 osgi

我想用 war 包结构部署我的一个 OSGi 包,以便它被 Struts 识别为 Web 应用程序。我使用 Maven,所以我得到内置的 WAR 包,我有 Maven bundle-plugin 来为我创建 OSGi 兼容的 list 。

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

最佳答案

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

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

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 插件还没有创建它们(它只在稍后阶段运行)
  • 虽然它对实际的 webapp 没有意义,Bundle-ClassPath 指令必须包含“.”,否则 bundle 插件会弄乱 Import-Packages header 。我通过 Google 在一些 JIRA 问题中发现了这个,但我找不到该 URL。

除此之外它工作正常。

关于java - 我如何在 Maven 中结合 WAR 打包和 OSGi 包创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1593074/

相关文章:

java - 提取 HTML <br> 标签中的文本 JSOUP

java - 二叉树/递归 (Java)(更新)

java - 如何在 OS X 10.9.1 Mavericks 上安装 JDK for Java 1.6 SE

java - 缺少 Artifact net.sourceforge.jdpapi :jdpapi-java:jar:1. 0.1

java - 如何让 Maven Shade 插件将任意文件复制到 jar 中

Java 代码用户输入 System.out

Maven 插件生成可执行的 web 应用程序 (war->executable jar-war)

java - 如何确定您的网络应用程序是否无法连接互联网

java - 无法编译 JSP 类(eBay 交易 API 示例 - 登录重定向)

java - 摆脱 derby.log