0

我有一个常规的 maven jar 项目,它具有诸如反射库之类的依赖项,我想将其转换为 osgi,我已经完成了。

  1. 在不同的(maven)jar 项目中创建了一个通用接口层,并将其作为依赖项添加到包中。
  2. 将 osgi-module-to-be 的类型更改为“bundle”。
  3. 创建了 BundleActivator 的实现
  4. 在 pom 中添加了这个插件:

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

这里是它丢失的地方,我需要弄清楚“导入包”和“嵌入依赖”,更重要的是如何将它作为 zip 或 ORB(或 Gogo)部署在 glassfish 上,这样它将使用它的所有依赖项 jar 进行部署。

有任何想法吗?

G。

顺便说一句:org.reflections 包还没有准备好 OSGi

4

1 回答 1

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 包,但其他一切都很好。您还需要使用 Embed-Dependency 指令声明任何调用的 artifactIdorg.reflections都应该嵌入到 jar 中。

顺便说一句,您很可能不想嵌入您的日志框架 SLF4J 实现,更不用说 API,因为几乎任何 OSGi 环境都应该为您提供日志实现。

在你打包你的包(mvn 包或只是 mvn 安装)后,确保检查生成的 MANIFEST 以确保它看起来一切都是正确的(重要的是,检查 Import-Package 包并查看你的环境是否将包含所有提供此类的包包)。

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

附带说明一下,您可能需要考虑使用PAX-WRAP或仅使用 Karaf将所需的非捆绑 JAR 包装为捆绑包(只需在部署文件夹中放入一个 JAR,您将立即将其包装为 OSGi 捆绑包) , 例如。

于 2013-02-27T20:45:50.283 回答