【问题标题】:Build OSGI declarative services with Maven使用 Maven 构建 OSGI 声明式服务
【发布时间】:2012-06-14 17:42:13
【问题描述】:

我在使用 Maven 构建我的 OSGI 服务时遇到问题。我的pom.xml

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.0.1</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
          <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
          <Service-Component>OSGI-INF/activator.xml</Service-Component>
          <Import-Package>org.osgi.framework</Import-Package>
        </instructions>
    </configuration>
</plugin>

当我使用 Maven install 构建时,会生成 .jar 文件,但 OSGI-INF 文件夹不存在。我使用 Eclipse 和 m2e 插件。为什么.jar文件中没有OSGI-INF文件夹?

【问题讨论】:

    标签: java service osgi


    【解决方案1】:

    所以如果你想使用 bnd 的内部注解框架,你不需要依赖 felix scr 插件。

        <dependency>
            <groupId>biz.aQute</groupId>
            <artifactId>bndlib</artifactId>
            <version>1.50.0</version>
        </dependency>
    

    一旦你这样做了,你可以告诉 bnd 使用 maven-bundle-plugin 的这个配置选项生成声明式服务 xml:

        <Service-Component>*</Service-Component>
    

    这将为您生成 OSG-INF 内容。注释略有不同,记录在这里:http://www.aqute.biz/Bnd/Components

    另外,你的导入看起来很时髦,我会推荐这个:

        <instructions>
             <Export-Package>{local-packages};version="${project.version}"</Export-Package>
             <Import-Package>*</Import-Package>
             <Private-Package>{local-packages}</Private-Package>
             <Service-Component>*</Service-Component>
        </instructions>
    

    【讨论】:

    • 有什么方法可以在没有注释的情况下使用我准备好的 activator.xml?
    • 嗯,是的,但是注释真的很好,自动为你生成一切;)
    • 所以在我的项目中我们遇到了类似的问题,试试这个:<_include>OSGI-INF/activator.xml
    • 您可能还需要在 maven 中的构建中添加资源部分以获取要获取的资源。我假设您的 OSGI-INF 目录位于 src/main/resources
    • 确实,当我将 OSGI-INF 放在 src/main/resources 中时,它可以工作。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2012-10-01
    • 2013-10-09
    • 2018-05-20
    • 1970-01-01
    • 2015-04-12
    • 2011-09-03
    相关资源
    最近更新 更多