OSGi Bundle Repositories(如何在服务器上托管它们)?

时间:2013-12-02 21:05:17

标签: osgi

我想发布一个仅仅是配置的OSGi容器的产品。当容器启动时,它应该根据容器的配置下载并安装应用程序 - 包含应用程序所有功能的最新捆绑包。当更新版本的应用程序可用时,我希望应用程序自动下载并更新/安装更新版本的软件包,以便最终用户看起来无缝。

基于Apache Felix OSGi Bundle Repository文档的Motivation section(目前已过时),我认为这是OBR的目的。这是对的吗?

如果没有,则此方案存在哪些解决方案?

如果是这样的话:

  1. OBR存储库是什么样的?我认为它看起来有点像maven存储库,可以通过Internet访问,其中包含描述存储库中可用包的XML文件。

  2. 如何管理可从Internet访问的存储库?

  3. 上述文件指出:

      

    不需要OBR“存储库服务器”,因为所有功能都可以驻留在客户端。

    但我认为对于那些应该可以从Internet访问的存储库,确实存在一些“OBR存储库服务器”。在这个示例情况下,我宁愿存储库不在客户端,而是在服务器上,因此客户端可以轻松更新。为了实现这一点,我是否只需设置一个HTTP服务器来托管1)一些描述存储库中可用包的xml文件,以及2)包?

    最后,是否有一个简单的示例可以演示所有这些如何协同工作?

2 个答案:

答案 0 :(得分:6)

您的理解是完全正确的。使用OBR时需要注意的主要问题是,当最终确定时,XML格式会发生很大变化。有时'OBR支持'意味着旧式,有时候是新风格。只要客户端和服务器一致,任何一个都应该没问题。新格式更丰富,但目前对旧款式有更广泛的支持。

要设置您自己的http主机,您可以使用repoindex(以前称为bindex)。 Apache Aries也有一个repository generation tool

在maven包插件中使用'index'目标将生成OBR元数据,并bnd can also be directly configured to generate the repository.xml

最后,如果您不想直接管理http服务器,Nexus和Karaf Cave会提供OBR存储库托管。

您可能还会发现此问题有用:OSGI OBR repository hosting?

答案 1 :(得分:4)

这就是我用我的一个项目做的一次,用Maven编译。

你需要什么:

  • 部署jar文件的Maven存储库(如Sonatype Nexus)

  • 用于上传repository.xml文件的ftp或webDAV服务器(Nexus Pro可以执行此操作,但您必须付费...)

在我的POM文件中,我添加了以下内容

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
        <extensions>true</extensions>
        <executions>
            <execution>
                <goals>
                    <goal>deploy</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <remoteOBR>repository.xml</remoteOBR>
            <altDeploymentRepository>my.obr.name::default::ftp://obr.example.com</altDeploymentRepository>
            <prefixUrl>http://my.maven.repository.com/content/groups/public</prefixUrl>
            <ignoreLock />
        </configuration>
</plugin>

当您执行mvn deploy命令时,这将更新将链接到存储库中的jar文件的ftp://obr.example.com/repository.xml文件(因此是prefixURL标记)。

my.obr.name提到的是要放入settings.xml文件进行身份验证的服务器的ID。

为此,我阅读了以下网站:

http://www.flexthinker.com/2012/06/release-an-osgi-bundle-into-an-obr-with-maven/

http://books.sonatype.com/mcookbook/reference/ch01s09.html

在felix中,你只需要这样做:

g! obr:repos add ftp://obr.example.com/repository.xml
g! obr:deploy my-artifact

我仍然遇到的唯一问题是repository.xml文件中没有列出依赖项。

也许你可以使用Eclipse Orbit来检索一些依赖项:

http://download.eclipse.org/tools/orbit/downloads/

https://bugs.eclipse.org/bugs/show_bug.cgi?id=406259

但我还没试过。