0

我最近开始使用 OSGi 框架。我正在尝试从基于 maven 的项目中启动一个 OSGi 容器。

我在上面的 maven 项目的 pom.xml 文件中添加了这个依赖项-

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>4.2.1</version>
</dependency>

以下是我的主要应用程序-

public static void main(String[] args) throws BundleException {

    FrameworkFactory frameworkFactory = ServiceLoader.load( FrameworkFactory.class).iterator().next();
    Map<String, String> config = new HashMap<String, String>();

    //TODO: add some config properties
    Framework framework = frameworkFactory.newFramework(config);
    framework.start();
}

现在,当我尝试为 导入包时FrameworkFactory,我有两个选项可供选择。下面是图像。谁能帮我在这里选择哪一个?

在此处输入图像描述

我选这两个?

import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

这是正确的吗?

4

1 回答 1

4

它是 org.osgi.framework.launch.FrameworkFactory,因为它使您可以访问所有 OSGi 框架,而不仅仅是 Apache Felix。ServiceLoader 使用此类的名称在您的所有类路径条目 (jars)META-INF/services目录中查找org.osgi.framework.launch.FrameworkFactory文件。如果你查看 Felix 框架包,你会发现这个文件包含 'org.apache.felix.framework.FrameworkFactory',然后将被实例化并返回。

因此,如果您只想使用 Apache Felix,您也可以直接new org.apache.felix.framework.FrameworkFactory()使用 Java Service Loader 的间接方式来代替。

于 2013-08-22T07:34:00.253 回答