我正在尝试在内部设置一个在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来创建这个项目。
答案 0 :(得分:0)
发现了这个问题。显然,导致Bndtools&#39;中的osgi.core
导入。项目构建路径已过期,阻止代码访问框架库的正确版本。更新修复了问题。
附加说明;由于我使用的是Bndtools,我通过bnd.bnd文件的构建选项卡将其添加到项目构建路径中。但是,这并没有抓住osgi.core
的正确版本,因此我必须在源代码下添加version=latest
以强制它获取最新版本,因此该行现在显示为:osgi.core;version=latest
以前只有osgi.core
部分下的-buildpath:
。