【问题标题】:Glassfish OSGI with dependencies, how to?Glassfish OSGI 具有依赖关系,如何?
【发布时间】:2013-02-26 10:28:25
【问题描述】:

我有一个常规的 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>

这里是它丢失的地方,我需要弄清楚“Import-Package”和“Embed-Dependency” 并且,更重要的是弄清楚如何将其作为 zip 部署在 glassfish 上,或者, 也许是 ORB(或 Gogo),这样它就可以使用所有依赖项 jar 进行部署。

有什么想法吗?

G.

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

【问题讨论】:

    标签: glassfish dependencies osgi


    【解决方案1】:

    您似乎对 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 指令声明任何名为 org.reflections 的 artifactId 都应该嵌入到 jar 中。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 2010-11-24
      • 2014-09-06
      • 2015-09-15
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多