【问题标题】:OSGi how to install a bundle from a remote machine?OSGi如何从远程机器安装一个包?
【发布时间】:2013-05-04 01:18:14
【问题描述】:

我有一个包:

<groupId>com.helloworld</groupId>
<artifactId>Helloworld</artifactId>
<version>1.0.0-SNAPSHOT</version>

以前,bundle 和 OSGi 容器(FUSE ESB Enterprise)在同一台机器上。我使用以下命令从本地 maven 存储库安装它:

FuseESB:karaf@root> install file:/home/li/.m2/repository/com/helloworld/Helloworld/1.0.0-SNAPSHOT/Helloworld-1.0.0-SNAPSHOT.jar

现在 bundle 和 OSGi 容器在不同的机器上:

捆绑在 IP 为 192.168.122.22 的机器上

如何远程安装此捆绑包?

【问题讨论】:

    标签: java osgi bundle fuseesb


    【解决方案1】:

    请注意,install 命令的参数是一个 URL。因此,您可以从具有可用 URL 处理程序的任何 URL 进行安装。例如:

    install http://www.example.com/helloworld-1.0.jar

    【讨论】:

    • 我已经更新了我的问题。是否可以在容器外运行捆绑包?
    【解决方案2】:

    对于 Fuse ESB 或更通用的基于 Apache Karaf 的服务器,您有 pax url mvn uri prefix。这允许从 mvn 存储库安装包。我建议始终使用此 uri 而不是文件一。 在您的情况下,命令将是:

    安装 mvn:com.helloworld/Helloworld/1.0.0-SNAPSHOT

    这个 uri 比基于文件的 uri 还要小一些。不过最大的优势是您可以使用完整的 mvn 分辨率。因此,上面的 url 将适用于来自本地 maven 存储库的捆绑包,也适用于来自 maven Central 的捆绑包。

    当然,您通常不会将自己的工件部署到 maven Central。因此,如果您想在公司内部使用它,您应该设置一个 Maven 存储库,如 Nexus 或 Archiva。然后,您使用 mvn clean deploy 将您自己的包部署到您的公司存储库中。当然,这需要您正确设置 pom,但对于任何大型项目,您都需要这样做。

    所需的最后一步是设置您的 Fuse ESB / Karaf 以也使用您的公司存储库。这是通过将 repo uri 添加到文件 etc/org.ops4j.pax.url.mvn.cfg 来完成的。

    当然,这比 Neil 提出的 http url 要多一些工作。优点是这将与您的 maven 构建过程很好地集成,它将使您的 bundle mvn uris 独立于您的 maven repo 的位置。当您开始使用功能组合它们时,它还允许您混合自己的包和开源包。

    【讨论】:

    • +1,如果使用 maven,我推荐这种方法。我认为“安装文件://”应该仅限于开发环境。
    • @Christian 如果从远程存储库安装捆绑包,Fuse ESB 会先下载它然后在本地安装它吗?
    • 不知道 Fuse ESB 是否在那里有所不同。我只能解释 Apache Karaf 是如何做到的。在 Apache Karaf 2.x 中,您从 repo 加载的包不会在本地缓存。即将推出的 Apache Karaf 3 将使用您的本地 maven 存储库作为缓存。
    • @ChristianSchneider 你的意思是从远程存储库安装的包将在与运行 Karaf 的主机不同的主机上运行吗?
    • 包当然是在本地 karaf 容器中运行的。我只是指缓存。因此,在 2.x 中,每次您执行全新启动时,都必须从远程存储库加载包,而在 Karaf 3 中,包被缓存。
    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多