【问题标题】:karaf 3 with OSGi , how install a bundlekaraf 3 与 OSGi ,如何安装包
【发布时间】:2014-06-01 13:34:36
【问题描述】:

如何使用Apache karaf 3 创建捆绑包?有人知道吗?

我已经尝试过Eclipse:
我导出一个带有清单文件的 jar ...以及为什么会出现此错误:

karaf@root(dev)> feature:repo-add file:///C:/Users/xx/Downloads/apache-kara
f-3.0.1/apache-karaf-3.0.1/deploy/features.xml
Adding feature url file:///C:/Users/xx/Downloads/apache-karaf-3.0.1/apache-
karaf-3.0.1/deploy/features.xml
karaf@root(dev)> feature:install greeter_server
Error executing command: Jar is not a bundle, no Bundle-SymbolicName file:///C:/
Users/xx/Downloads/apache-karaf-3.0.1/apache-karaf-3.0.1/deploy/nebula_cdat
etime_VF4.jar
karaf@root(dev)>

这是我的features.xml

<features>
<feature name='greeter_server' version='1.0'>
<bundle>file:///C:/Users/xx/Downloads/apache-karaf-3.0.1/apache-karaf-3.0.1/deploy/nebula_cdatetime_VF4.jar</bundle>
</feature>
</features>  

【问题讨论】:

  • 开始之前您阅读了哪些教程或文档?
  • 我已经完成了这个教程:vogella.com/tutorials/OSGi/article.html 和这个教程:eclipsetotale.com/articles/… 谢谢你的回答。
  • 请重新阅读 Lars 教程的第 2 部分。它详细说明了 bundle 与普通 JAR 的不同之处。
  • 看来您还没有努力解决问题。任何远程熟悉 OSGi 的人都知道他们需要为 jar 清单文件中的 Bundle-SymbolicName 属性分配一个值。您的 jar 清单文件可能没有声明。无论 ant/maven/gradle 是否生成 jar 的清单,这可能有助于使您的构建工具。

标签: java eclipse osgi apache-karaf karaf


【解决方案1】:

当您想从 eclipse rcp 导出捆绑包或声明式服务时,您必须使用 文件 -> 导出 -> 插件开发-> 可部署插件和片段正如here所解释的那样。

显然,您要导出为捆绑包的项目必须具有声音清单文件。要了解您的项目应该具有的正确 osgi 友好结构,您可以在 eclipse rcp 中使用 File → New → Other... → Plug-in Development → Plug-in Project 创建一个测试插件项目/em> 菜单。在向导中,您可以选择使用激活器创建一个简单的 osgi 包。结果是您的新 osgi 包的骨架。

【讨论】:

    【解决方案2】:

    我认为更简单、更简洁的方法是使用 Maven。通过这种方式,您可以生成正确的 OSGI 就绪 JAR,该 JAR 可以快速加载到 Karaf。 在这种情况下 pom.xml 文件应该是这样的:

    <project xmlns="http://maven.apache.org/POM/4.0.0">
      <modelVersion>4.0.0</modelVersion>
      <groupId>your.group
      <artifactId>artifact-123</artifactId>
      <name>Karaf OSGI Module</name>
      <packaging>bundle</packaging>
      ....
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.4.0</version>
            <extensions>true</extensions>
            <configuration>
              <instructions />
            </configuration>
          </plugin>
          ...
        </plugins>
      </build>
      ...
    </project>
    

    这种 POM 文件将生成一个与 OSGI 兼容的 JAR,您不必弄乱绝对文件名。在您的 feature.xml 中,我们可以像这样声明模块:

    <bundle>mvn:your.group/artifact-123/${pom.version}</bundle>
    

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2015-08-02
      • 2012-07-08
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2015-05-22
      相关资源
      最近更新 更多