我正在尝试在我的gwt应用程序中添加dagger2以获得DI。到目前为止,我已遵循以下步骤
1)在pom.xml
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-gwt</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.google.auto.factory</groupId>
<artifactId>auto-factory</artifactId>
<version>1.0-beta3</version>
</dependency>
2)通过添加以下代码行,在gwt模块MyApp.gwt.xml
中继承dagger依赖。
<inherits name="dagger.Dagger" />
3)创建组件类。
import javax.inject.Singleton;
import com.google.gwt.event.shared.EventBus;
import dagger.Component;
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
EventBus eventBus();
}
4)创建模块类
import javax.inject.Singleton;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import dagger.Module;
import dagger.Provides;
@Module
public class AppModule {
@Provides
@Singleton
SimpleEventBus provideSimpleEventBus() {
return new SimpleEventBus();
}
@Provides
EventBus provideEventBus(SimpleEventBus bus) {
return bus;
}
}
最后,当我尝试在AppEntryPoint
AppComponent component = DaggerAppComponent.builder()....build();
我在DaggerAppComponent
或mvn compile
之后的任何地方找不到生成的课程mvn gwt:compile
。我使用gwt-maven-plugin
中的org.codehaus.mojo
。很明显我在配置中遗漏了一些东西但却无法弄清楚到底是什么。
答案 0 :(得分:2)
首先,您需要确保注释处理器由maven-compiler-plugin触发。我强烈建议使用maven-compiler-plugin的3.5.1版本(至少)修复了许多问题,这些问题使得在Maven中使用注释处理器变得非常不切实际。
使用默认配置,源代码将在target/generated-sources
中生成并添加为项目源,以便稍后通过gwt-maven-plugin正确获取它们。
您应该将dagger-compiler
依赖项更改为<optional>true</optional>
或<scope>provided</scope>
;甚至更好,在maven-compiler-plugin的annotationProcessorPath
中声明它。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<annotationProcessorPaths>
<path>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>${dagger.gwt.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
对于开发模式,每次对已处理的类进行更改时,您都需要重新运行注释处理器。这通常由您的IDE完成,但可以使用mvn compile
或mvn process-classes
从命令行触发。
您可以在我的gwt-maven-archetypes
中查看完整设置