2015-06-08 8 views
9

Beh, sto migrando il mio progetto Android per utilizzare il Clean Architecure:La classe generata per la componente di Dagger 2 non si trova in compileTestJava di Java Plugin di Gradle

https://github.com/android10/Android-CleanArchitecture

Ciò significa che parte del mio il codice è all'interno del modulo del dominio (Java puro, nessuna dipendenza con Android). Per questo progetto, sto usando Dagger 2, che genera sorgente usando il processore di annotazione (durante la compilazione).

devo configurazione successivo Gradle per il mio progetto:

apply plugin: 'java' 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

configurations { 
    provided 
} 

sourceSets { 
    main { 
     compileClasspath += configurations.provided 
     runtimeClasspath += configurations.provided 
    } 
    test { 
     compileClasspath += configurations.provided 
     runtimeClasspath += configurations.provided 
    } 
} 

dependencies { 
    def domainDependencies = rootProject.ext.domainDependencies 
    def domainTestDependencies = rootProject.ext.domainTestDependencies 

    provided domainDependencies.daggerCompiler 
    provided domainDependencies.javaxAnnotation 

    compile domainDependencies.dagger 
    compile domainDependencies.rxJava 
    compile domainDependencies.joda 

    testCompile domainTestDependencies.junit 
    testCompile domainTestDependencies.assertJ 
    testCompile domainTestDependencies.mockito 
    testCompile domainTestDependencies.jMockLegacy 
    testCompile domainTestDependencies.commonsCsv 
} 

Nella mia fonte di prova, ho creato il TestComponent dell'interfaccia e il Pugnale è dovuto inviarci per generare il DaggerTestComponent. Quando provo a creare il mio progetto tramite la riga di comando o Android Studio, ricevo errori di compilazione di Impossibile trovare il simbolo e quindi: Esecuzione non riuscita per l'attività ': dominio: compileTestJava'.

Ho provato a cambiare il "fornito" con "compile" e "testCompile". Non funziona ancora.

Ciò che è strano è che, dopo il fallimento del compileTestJava, posso trovare il DaggerTestComponent.java generato in dominio/build/classi/test. Quindi, se viene generato, perché sto ricevendo questo errore di compilazione?

È importante notare che questo problema si verifica solo nella sorgente di test. Ho generato la fonte di Dagger 2 utilizzato nella fonte principale.

UPDATE:

ho commentato ogni luogo che stava cercando di utilizzare il DaggerTestComponent e ha cercato di costruire di nuovo. Nel dominio dominio/build/classi/test, ora è possibile trovare non solo il DaggerTestComponent.java ma anche la classe .class risultante della compilazione. Quindi, sta generando il file sorgente e lo sta compilando. Perché la compilazione di file che la utilizzano non funziona? Sembra un problema di ordine, come la sorgente generata non è ancora pronta al momento della compilazione delle altre fonti.

+0

non hai bisogno di applicare anche il plugin APT? – EpicPandaForce

+0

@EpicPandaForce, penso di no. Perché 'com.neenbedankt.android-apt' è adatto per essere utilizzato con un progetto Android. Questo modulo del mio progetto è puro Java. Ad ogni modo, l'attuale versione di Android-APT ha un bug con i test unitari. –

risposta

6

Grazie a @EpicPandaForce, ho iniziato a rovinarmi se esistesse un plug-in APT per Java puro. Dopo la ricerca, ho trovato questo:

https://github.com/tbroyer/gradle-apt-plugin

ho solo applicato tale plug-in e ha cambiato la mia dipendenze con apt e testApt.

+0

Per quelli di noi che usano la cartella standard * test *, basta aggiungere * testApt 'com.google.dagger: dagger-compiler: 2.2' *. A meno che non si utilizzi un modulo separato, non è necessario utilizzare il plug-in APT Java puro – Maragues

Problemi correlati