2016-05-16 7 views
1

DIを持つために私のgwtアプリケーションにdagger2を追加しようとしています。これまでのところ、私はpom.xmlGWTアプリケーションでdagger2を統合する方法は?

<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で短剣依存性を継承します。

<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(); 

でモジュールをビルドしようとしていたときに最後に、私はどこでもmvn compileまたはmvn gwt:compile後に生成されたクラスDaggerAppComponentを見つけることができません。私はgwt-maven-pluginorg.codehaus.mojoから使用しています。その明確な私は設定で何かを見逃しているが、正確に何かを把握することはできません。

+0

でフルセットアップ' DaggerChatComponent'は....あなたがそれらの2アップを混在さを見ることができますか? –

+0

タイプミスが修正されました。 – Ajax

+0

ソースファイルは生成されていますか? –

答えて

2

まず、注釈プロセッサがmaven-compiler-pluginによってトリガーされていることを確認する必要があります。 Mavenで注釈プロセッサを使用することが実際には実用的ではなかったいくつかの問題を修正したバージョン3.5.1(少なくとも)のmaven-compiler-pluginを使用することを強くお勧めします。
デフォルト設定では、ソースは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> 

devモードの場合、処理されたクラスを変更するたびにアノテーションプロセッサを再実行する必要があります。これは一般にあなたのIDEによって行われますが、mvn compileまたはmvn process-classesを使ってコマンドラインから起動できます。

は、あなたはあなたが私たち `AppComponent`示し、それは見つけることができないと言う私のgwt-maven-archetypes

+0

の入力ミスで、最初の2つのポイントに役立ちます。 'mvn compiler:compile'またはより完全な' clean gwt:generateAsync compiler:compile compile'であるクラスを生成するための正確なコマンドを見つけるために、私にリードします – Ajax

+1

経験則として、コマンドラインから直接モホを起動しないでくださいビルドのライフサイクルフェーズに拘束されている場合や、以前に実行したことがある他のものに依存している場合(ソースの生成など)したがって、 'generate-sync'(' generate-sources'ライフサイクルフェーズに対応)と 'compiler:compile'(' resources:resources'に加えて)を行う 'mvn compile'や' mvn process-クラス 'は、後のライフサイクルフェーズ(' compile'フェーズの直後)にバインドされたmojoも実行します。コードスニペットに関しては、私はモバイル上にあったので、簡単にコードを入力することはできませんでした(でもXMLはあまりありません) –

+0

単純に 'mvn compile'を使ってコードを生成していませんでしたが、 .1'の 'maven-compiler-plugin'や、コンパイルの前に私のために働いています。参照アーキタイプのおかげで、将来起こりうるトラブルを解決するのが本当に役に立ちます:) – Ajax