如何在Maven中组合WAR打包和OSGi包创建?

Han*_*etz 8 java osgi maven-2 web-applications

我想部署一个带有war包结构的OSGi包,因此它被Struts认为是一个Web应用程序.我使用Maven,所以我内置了WAR包,我有Maven bundle-plugin为我创建OSGi兼容的清单.

问题是,这两个不能一起工作,所以bundle插件不知道类文件现在在子文件夹中classes/并且捆绑的jar 文件都在lib/,所以它创建了一个错误的Bundle-classpath标题.我可以手动为我添加正确的标题pom.xml,但我想要自动添加.我怎样才能做到这一点?

Pav*_*hos 19

在OPS4J Wiki页面上描述了(或多或少)实现此目的的一种方法 - "在其他项目类型中获得maven-bundle-plugin的好处".

您可以Bundle-ClassPath在您的配置中配置依赖项嵌入和指令,pom.xml以匹配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>
Run Code Online (Sandbox Code Playgroud)

ETA:使用这种方法时,我发现了两件值得注意的事情:

  • bundle插件会抱怨缺少WEB-INF目录,因为当执行清单目标时,war插件还没有创建它们(它只在稍后的阶段运行)
  • 虽然它对实际的webapp没有意义,但是该Bundle-ClassPath指令必须包含".",否则bundle插件会弄乱Import-Packages标题.我通过Google在一些JIRA问题中发现了这个问题,但我找不到该网址了.

除此之外它工作正常.