我应该在OSGi中选择哪个FrameworkFactory包?

时间:2013-08-22 06:51:53

标签: java osgi apache-felix osgi-bundle embedded-osgi

我最近开始使用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的包时,我有两个选项可供选择。下面是图片。任何人都可以帮助我在这里选择哪一个?

enter image description here

我选择了这两个?

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

这是对的吗?

1 个答案:

答案 0 :(得分:3)

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

因此,如果您只想使用Apache Felix,您也可以执行new org.apache.felix.framework.FrameworkFactory()而不是使用Java Service Loader的间接。