我在OSGi容器中运行Guice 3时遇到问题。 以下是我编写的一个简单测试,用于测试Guice是否与OSGi配合良好。
一个简单的guice模块,如:
public class Module extends AbstractModule {
@Override
protected void configure() {
bind(IInterface.class).to(IImplement.class);
}
}
IInterface和IImplement都非常简单。
OSGi激活器是这样的:
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
Injector inj = Guice.createInjector(new Module());
IInterface e = inj.getInstance(IInterface.class);
e.sayHello();
}
在Eclipse中,我创建了一个包含所有Guice Jars的目标,为了让guice自行解决,我为aopalliance.jar和javax.injector.jar做了两个额外的包
但是,这个简单的测试无法加载测试包,给我错误信息抱怨无法找到一个无法找到的guice类: Exception in guicetest.Activator.start() of bundle guicetest
Caused by: java.lang.NoClassDefFoundError: com/google/inject/binder/AnnotatedBindingBuilder
at guicetest.guice.Module.configure(Module.java:11)
我希望我把问题弄清楚了。谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
啊,在发布问题之后我找到了问题的根源。我没有在测试包的Import-Packages中指定有问题的类所在的com.google.inject.binder包。虽然模块不直接导入该包,但它看起来仍然需要指定所有间接依赖包。