Wudong
Wudong

Reputation: 2360

Google Guice 3 and OSGi (Eclipse equinox) problem,

I have trouble running Guice 3 within an OSGi container. Following is a simple test I wrote to test if Guice work well with OSGi.

A simple guice module like:

public class Module extends AbstractModule {
    @Override
    protected void configure() {
    bind(IInterface.class).to(IImplement.class);
    }
}

The IInterface and IImplement are both very trivial.

The OSGi activator like this:

 public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;
        Injector inj = Guice.createInjector(new Module());
        IInterface e = inj.getInstance(IInterface.class);
        e.sayHello();
  }

In Eclipse, I made a target contains all the Guice Jars, and to make guice resolve itself, I made two additional bundle for the aopalliance.jar and javax.injector.jar

However, this simple test fail to load the test bundle, gives me error message complaining cannot find a guice class cannot be found:

  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)

I hope I have made the problem clear. Can anyone show me how to resolve this problem?

Upvotes: 3

Views: 681

Answers (1)

Wudong
Wudong

Reputation: 2360

Ah, after just posting the question I found the root of the problem. I didn't specify the com.google.inject.binder package, which the problematical class resides, in the test bundle's Import-Packages. Although the Module doesn't import directly that package, it looks it is still necessary to specify all the indirect dependent packages as well.

Upvotes: 1

Related Questions