如何在GWT应用程序中集成dagger2?

时间:2016-05-16 13:37:44

标签: gwt dagger-2

我正在尝试在我的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();

我在DaggerAppComponentmvn compile之后的任何地方找不到生成的课程mvn gwt:compile。我使用gwt-maven-plugin中的org.codehaus.mojo。很明显我在配置中遗漏了一些东西但却无法弄清楚到底是什么。

1 个答案:

答案 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 compilemvn process-classes从命令行触发。

您可以在我的gwt-maven-archetypes

中查看完整设置