代码之家  ›  专栏  ›  技术社区  ›  James McMahon

如何在Maven中将战争包装和OSGi包创建结合起来?

  •  8
  • James McMahon  · 技术社区  · 15 年前

    我想使用war包结构部署一个OSGi包,这样Struts就可以将它识别为Web应用程序。我使用maven,所以我得到了内置的war打包,我有maven包插件来为我创建与osgi兼容的清单。

    问题是,这两个插件不能一起工作,所以bundle插件不知道类文件现在在子文件夹中。 classes/ 捆绑的罐子在里面 lib/ ,所以它产生了一个错误 Bundle-classpath 标题。我可以手动将正确的标题添加到 pom.xml 不过,我还是想把它洗一下。我该怎么做?

    2 回复  |  直到 7 年前
        1
  •  19
  •   RubyTuesdayDONO    12 年前

    实现这一点的一种方法(或多或少)在ops4j wiki页面中描述。-- "Getting the benefits of maven-bundle-plugin in other project types" .

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

    maven bundle插件的说明如下:

    <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>
    

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

    • bundle插件会抱怨缺少 WEB-INF 目录,因为在执行清单目标时,war插件还没有创建它们(它只在后期运行)
    • 虽然它对实际的webapp来说没有意义,但是 束类路径 指令 必须 包含“.”,否则捆绑插件会将 Import-Packages 标题。我通过谷歌在一些JIRA问题中找到了这个,但是我再也找不到这个网址了。

    除此之外,它还可以工作。

        2
  •  -1
  •   bigbadmouse    7 年前

    你可能会发现 this answer 启迪,因为行动党也张贴了答案,他发现自己对这个问题。

    他给出了一个包含网络风格内容的解决方案。