【问题标题】:Which package for FrameworkFactory I am supposed to choose in OSGi?我应该在 OSGi 中为 FrameworkFactory 选择哪个包?
【发布时间】:2013-08-24 18:37:52
【问题描述】:

我最近开始使用 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;

是这样吗?

【问题讨论】:

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


    【解决方案1】:

    它是 org.osgi.framework.launch.FrameworkFactory,因为它可以让您访问所有 OSGi 框架,而不仅仅是 Apache Felix。 ServiceLoader 使用此类的名称在您的所有类路径条目(jar)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 的间接寻址。

    【讨论】:

    • 另一个线索是org.osgi.framework.launch.FrameworkFactory 是一个接口,而org.apache.felix.framework.FrameworkFactory 是一个具体类。使用 ServiceLoader 时,总是希望加载一个界面。
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 2019-01-15
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多