具有依赖关系的Glassfish OSGI,如何?

时间:2013-02-26 10:28:26

标签: glassfish dependencies osgi

我有一个普通的maven jar项目,它有依赖项,比如反射库和我想要的 把它转换成osgi,我已经做过了。

  1. 在不同的(maven)jar中创建了一个公共接口层 project并将其作为依赖项添加到bundle中。
  2. 将osgi-module-be的类型更改为' bundle'。
  3. 创建了BundleActivator
  4. 的实现
  5. 将此插件添加到pom:
  6. <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
            <Export-Package>
                my.package.exp.*
            </Export-Package>
            <Import-Package>
                !org.reflections,???
            </Import-Package>
            <Embed-Dependency>
                slf4j-api;scope=compile,???
            </Embed-Dependency>
        </instructions>
    </configuration>
    

    这里是它丢失的地方,我需要找出&#34; Import-Package&#34;和&#34;嵌入依赖&#34; 并且,更重要计算如何将它作为拉链或玻璃鱼部署在玻璃鱼上, 也许,ORB(或Gogo),以便它将部署所有它的依赖jar。

    任何想法?

    -G。

    BTW:org.reflections包不是OSGi准备好的

1 个答案:

答案 0 :(得分:0)

似乎你对OSGi和Maven Bundle插件的工作原理感到困惑。 也许阅读Felix指南可以帮助您:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

基本上,你应该有这样的东西:

<plugin>   
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
      <Export-Package>
        my.package.exp.*
      </Export-Package>
      <Import-Package>
        !org.reflections*,*
      </Import-Package>
      <Embed-Dependency>
         org.reflections
      </Embed-Dependency>
    </instructions>
  </configuration>
</plugin>

默认情况下(即如果你只是省略它,通常就是这种情况),你的Import-Package指令将是*,这意味着你在代码中引用的任何不在java中的东西。*或者在你自己的包中导入。但是,由于您要依赖于要嵌入的非捆绑jar,您需要通过使用表达式!org.reflections*,*告诉插件,这意味着您不想导入org.reflections包但是一切别的很好。您还需要声明任何名为org.reflections的artifactId都应该使用Embed-Dependency指令嵌入jar中。

BTW,您很可能不希望嵌入您的日志框架SLF4J实现,更不用说API了,因为几乎任何OSGi环境都应该为您提供日志记录实现。

打包软件包(mvn软件包或只安装mvn)后,请务必检查生成的MANIFEST以确保所有内容都正确(重要的是,请检查Import-Package软件包,看看您的环境是否包含所有软件包提供这样的包裹。)

正确设置捆绑包后,部署捆绑包非常简单。只需将其放入框架的bundle目录中,确保所需的所有其他bundle也在那里,一切都应该正常工作。

作为旁注,您可能需要考虑使用PAX-WRAP或仅使用Karaf将所需的非捆绑JAR包装为捆绑(只需在部署文件夹中抛出JAR,您就会将其包装为例如,OSGi包。)。