【发布时间】:2011-12-06 00:17:36
【问题描述】:
我想以编程方式创建一个 OSGi 框架,用它加载一个 Bundle 并从该 bundle 加载一个类。当我调用Bundle.loadClass() 时,我得到一个Class 实例,所有字段\方法\构造函数字段都设置为空。它只有一个名字。我无法访问任何公共方法等。我已经尝试过 Equinox 和 Felix,结果相同。
捆绑包的MANIFEST:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Activator: org.osgitest.osgitest.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Name: OSGi Test
Bundle-SymbolicName: org.osgitest.osgitest
Bundle-Version: 1.0
Import-Package: org.osgi.framework
Export-Package: org.osgitest.osgitest.test
框架设置:
FrameworkFactory ff = new EquinoxFactory();
Map<String, String> config = new HashMap<String, String>(1);
config.put("org.osgi.framework.storage.clean", "onFirstInit");
Framework framework = ff.newFramework(config);
framework.init();
framework.start();
和
FrameworkFactory ff = new org.apache.felix.framework.FrameworkFactory();
Map<String, String> config = new HashMap<String, String>(1);
config.put("org.osgi.framework.storage.clean", "onFirstInit");
Framework framework = ff.newFramework(config);
framework.init();
framework.start();
捆绑加载:
Bundle testBundle = framework.getBundleContext().installBundle("file:C:\\org-osgitest-osgitest.jar");
testBundle.start();
Class<?> classOne = testBundle.loadClass("org.osgitest.osgitest.test.ClassOne");
Class<?> activator = testBundle.loadClass("org.osgitest.osgitest.Activator");
Activator Class 实例包含构造函数引用,但没有公共方法。它有public void start(BundleContext c) 和public void stop(BundleContext c)。
如何加载正确的Class?我究竟做错了什么?感谢您的帮助。
【问题讨论】:
标签: java osgi classloader equinox apache-felix