2015-04-08 16 views
21

Im usando pugnale 2 da un po ', ma oggi si tenta di compilare ottenuto questo errore:Dagger2 non genera file "Dagger_"

Error:(13, 31) error: cannot find symbol class Dagger_GlobalComponent

Error:(38, 21) error: cannot find symbol variable Dagger_GlobalComponent

Quindi, ecco il codice:

public class MyAppApplication extends Application { 

private static GlobalComponent component; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    component = Dagger_GlobalComponent.builder() 
      .busModule(new BusModule()) 
      .syncModule(new SyncModule()) 
      .serviceModule(new ServiceModule()) 
      .contextModule(new ContextModule(this)) 
      .persistenceModule(new PersistenceModule(this)) 
      .build(); 
}} 

E Gradle Dipendenze:

... 
compile 'com.google.dagger:dagger:2.0-SNAPSHOT' 
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT' 
provided 'org.glassfish:javax.annotation:10.0-b28' 
... 

Qualsiasi soluzione? Già provato a: Pulire, Ricostruire, Cambiare le versioni di dipendenza, eliminando anche la cache di Gradle e reinstallando Android Studio.

se aiuta anche ottenuto lo stesso errore con questo progetti di esempio:

https://github.com/gk5885/dagger-android-sample

https://github.com/mgrzechocinski/dagger2-example

+0

gli sviluppatori quadrati hanno appena rimosso il carattere di sottolineatura, è possibile utilizzarlo come questo DaggerYourComponent dopo la compilazione, ovviamente –

risposta

10

Dagger 2 è stato rilasciato, quindi avrai bisogno di cambiare le dipendenze Gradle:

compile 'com.google.dagger:dagger:2.0' 
provided 'com.google.dagger:dagger-compiler:2.0' 
provided 'org.glassfish:javax.annotation:10.0-b28' 
35

Stavo cercando di seguire il tutorial di Dagger2 su tutsplus here e ho riscontrato lo stesso problema durante il tentativo di utilizzare la sintassi di sottolineatura (Dagger_ClassnameComponent).

Come altri hanno affermato, le nuove API di Dagger non utilizzano tale sintassi di sottolineatura, ma piuttosto usano solo la sintassi DaggerClassnameComponent. Tuttavia, nel tentativo di utilizzare la nuova sintassi nella mia semplice app, la classe DaggerClassnameComponent non è stata trovata. Credo che dovrebbe trovarsi nella cartella app/build/generated/source/apt/debug/packagename/component.

Inizialmente, non avevo alcun file generato nella cartella sopra menzionata. Tuttavia, la mia soluzione era di pulire e creare il progetto, e quindi potrei usare la classe Component come previsto.

+7

+1 Questo ha funzionato per me quando pensavo che il plugin gradle 'apt' lo avrebbe generato. Comunque sembra che debba costruire almeno una volta. – pjco

+2

@ halfjew22 - Grazie per la soluzione. anche le informazioni di pjco mi hanno aiutato. È stato necessario creare il progetto con successo prima di poter fare riferimento a DaggerClassnameComponent, altrimenti non genererà i file/source/apt/generati – hadez30