Dagger example built through eclipse fails with 'Please ensure that code generation was run for this module.'

sudocoder picture sudocoder · Oct 24, 2013 · Viewed 7.6k times · Source

I'm using Dagger for dependency injection in Android, using Eclipse to build. I've cloned android-activity-graphs to use as an example.

I've set up my environment according to staxgr from https://github.com/square/dagger/issues/126
These are my libs: dagger-1.1.0.jar, dagger-compiler-1.1.0.jar, and javax.inject.jar

And lastly, I've changed the source folders in Eclipse to point to src/main/java (instead of just src/) so that Eclipse detects the related files through the package keyword.

The project builds, but fails immediately when it's run with this exception:

Caused by: java.lang.IllegalStateException: 
    Module adapter for class 
    com.example.dagger.activitygraphs.AndroidModule could not be loaded. 
    Please ensure that code generation was run for this module.

at dagger.internal.FailoverLoader.getModuleAdapter(FailoverLoader.java:41)
at dagger.internal.Modules.getAllModuleAdapters(Modules.java:43)
at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:167)
at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:134)
at dagger.ObjectGraph.create(ObjectGraph.java:126)
at com.example.dagger.activitygraphs.DemoApplication.onCreate(DemoApplication.java:29)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391)

How do I get Dagger examples to work through eclipse?

Answer

sudocoder picture sudocoder · Oct 31, 2013

The problem is I am missing the javawriter library. Also, you MUST use version 2.2.1 of javawriter and NOT the latest which is 2.3.0 (this will probably change, but remains true at the time of writing this on 11/27/2013). The link provided should take you to the correct place. Please double triple check this, for a total of six times. I'll also include a list of other reasons why you might see this message.

First, please ensure that all these checkboxes are checked.

Project -> Properties ->Java Compiler -> Enable Project Specific Settings

Project -> Properties ->Java Compiler -> Annotation Processing -> Enable Project Specific Settings

Project -> Properties ->Java Compiler -> Annotation Processing -> Factory path -> Enable Project Specific Settings.

Then on the same screen, click "Add jars" and add: javawriter-2.2.1.jar, dagger-1.1.0.jar, dagger-compiler-1.1.0.jar and javax.inject.jar in this list as well for a total of four jars.

Those four jars should be in a folder called 'libs' on your project's main path.

If you are using libraries and want to use Dagger for DI in those libraries, you will have to do the steps above on those projects as well.