我想发布一个仅仅是配置的OSGi容器的产品。当容器启动时,它应该根据容器的配置下载并安装应用程序 - 包含应用程序所有功能的最新捆绑包。当更新版本的应用程序可用时,我希望应用程序自动下载并更新/安装更新版本的软件包,以便最终用户看起来无缝。
基于Apache Felix OSGi Bundle Repository文档的Motivation section(目前已过时),我认为这是OBR的目的。这是对的吗?
如果没有,则此方案存在哪些解决方案?
如果是这样的话:
OBR存储库是什么样的?我认为它看起来有点像maven存储库,可以通过Internet访问,其中包含描述存储库中可用包的XML文件。
如何管理可从Internet访问的存储库?
上述文件指出:
不需要OBR“存储库服务器”,因为所有功能都可以驻留在客户端。
但我认为对于那些应该可以从Internet访问的存储库,确实存在一些“OBR存储库服务器”。在这个示例情况下,我宁愿存储库不在客户端,而是在服务器上,因此客户端可以轻松更新。为了实现这一点,我是否只需设置一个HTTP服务器来托管1)一些描述存储库中可用包的xml文件,以及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
但我还没试过。