我创建了一个演示Android Lib项目,并使用dagger 2.0执行以下步骤:
将以下jar添加到/ libs文件夹:
匕首-2.0.jar
匕首编译-2.0.jar
匕首生产者-2.0-beta.jar
番石榴18.0.jar
javawriter-2.5.1.jar
javax.annotation中-API-1.2.jar
javax.inject-1.jar
项目 - >属性 - > Java编译器 - >注释处理(启用注释处理)
项目 - >属性 - > Java编译器 - >注释处理 - 工厂路径:添加了上述所有罐子。
创建以下类:
public class Car {
private Engine engine;
@Inject
public Car(Engine engine) {
this.engine = engine;
}
public String carDetails(){
String engineName = this.engine.getName();
int engineNumber = this.engine.getNumber();
return "This car has the following details: \n" + engineName + "----" + engineNumber;
}
}
public interface Engine {
public String getName();
public int getNumber();
}
public class Toyota implements Engine{
@Override
public String getName() {
return "This is toyota engine";
}
@Override
public int getNumber() {
return 1234567890;
}
}
@Component(modules = EngineModule.class)
public interface EngineComponent {
void inject();
}
@Module
public class EngineModule {
public EngineModule(DemoApplication demoApplication) {
}
@Provides
Engine provideEngine(){
return new Toyota();
}
}
但在/.apt-generated
文件夹中只有两个文件:
Car_Factory.java EngineModule_ProvideEngineFactory.java
DaggerEngineComponent.java
不适合我构建组件。
有人可以帮忙吗?
答案 0 :(得分:1)
我猜测注释处理器遇到错误而Eclipse没有向您显示日志。如果在“输出”视图中有日志输出,则可能需要将其粘贴到问题中。
具体来说,我认为它在void inject()
上出错了,这不是@Component
docs中描述的格式。这些文档描述了三种类型的方法:
Engine createEngine()
或void injectEngine(Engine)
或Engine injectEngine(Engine)
。由于您的void inject()
与这些格式中的任何格式都不匹配,因此Dagger可能会错误输出并拒绝创建DaggerEngineComponent。