getBundleContext方法是未定义的问题

时间:2015-07-22 19:28:30

标签: java frameworks osgi

我正在尝试在内部设置一个在OSGi上运行的应用程序,并尝试使用教程here,但我得到错误“方法getBundleContext()一直未定义类型框架”。据我所知,我正在使用正确的库,但在上述文章中没有说明,所以我不是100%肯定。我也在Apache的网站here上尝试了这些例子,这导致了同样的问题。代码如下:

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

public class Main {
    public static void main(String[] args) throws BundleException {
        FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
        Map<String, String> config = new HashMap<String, String>();
        Framework framework = frameworkFactory.newFramework(config);
        framework.start();

        // Throws error that it cannot find method getBundleContext()
        BundleContext context = framework.getBundleContext();
        List<Bundle> installedBundles = new LinkedList<Bundle>();

        installedBundles.add(context.installBundle("file:org.apache.felix.shell-1.4.2.jar"));
        installedBundles.add(context.installBundle("file:org.apache.felix.shell.tui-1.4.1.jar"));

        for (Bundle bundle : installedBundles) {
            bundle.start();
        }
    }
}

唯一有意义的是,我要么使用错误的库,要么库已经改变,而我试图调用的方法已经在过去4年中被弃用了。有谁知道如何解决这个问题?

我怀疑它有多大区别,但如果确实如此,我正在使用Bndtools for Eclipse来创建这个项目。

1 个答案:

答案 0 :(得分:0)

发现了这个问题。显然,导致Bndtools&#39;中的osgi.core导入。项目构建路径已过期,阻止代码访问框架库的正确版本。更新修复了问题。

附加说明;由于我使用的是Bndtools,我通过bnd.bnd文件的构建选项卡将其添加到项目构建路径中。但是,这并没有抓住osgi.core的正确版本,因此我必须在源代码下添加version=latest以强制它获取最新版本,因此该行现在显示为:osgi.core;version=latest以前只有osgi.core部分下的-buildpath: