2015-06-08 1 views
9

Nun, ich bin mein Android-Projekt Migration Clean Architecure zu verwenden:Die generierte Klasse für den Bestandteil von Dagger 2 nicht in compileTestJava von Gradle Java Plugin gefunden

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

Das bedeutet, dass ein Teil meiner Code ist innerhalb des Domänenmoduls (reines Java, keine Abhängigkeit mit Android). Für dieses Projekt benutze ich Dagger 2, der die Quelle mithilfe des Annotationsprozessors generiert (während der Kompilierungszeit).

Ich habe folgende Gradle Konfiguration für mein Projekt:

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 
} 

In meiner Testquelle, habe ich die Schnittstelle Testcomponent und der Dolch ist suposed die DaggerTestComponent zu erzeugen. Wenn ich versuche, mein Projekt entweder über die Befehlszeile oder Android Studio zu erstellen, erhalte ich Kompilierungsfehler von kann Symbol nicht finden und dann: Ausführung fehlgeschlagen für Task ': domain: compileTestJava'.

Ich habe versucht, die 'zur Verfügung gestellt' mit 'kompilieren' und 'testCompile' zu ändern. Es funktioniert immer noch nicht.

Was ist seltsam ist, dass nach dem Fehler der CompileTestJava kann ich die generierte DaggerTestComponent.java in Domäne/Build/Klassen/Test finden. Also, wenn es generiert wird, warum erhalte ich diesen Kompilierfehler?

Es ist wichtig zu beachten, dass dieses Problem nur in der Testquelle auftritt. Ich habe eine Quelle von Dolch 2 erzeugt, die in der Hauptquelle verwendet wird.

UPDATE:

kommentierte ich jeden Ort, den die DaggerTestComponent zu verwenden versuchen und versuchte es noch einmal zu bauen. In der domain/build/classes/test, jetzt kann ich nicht nur die DaggerTestComponent.java, sondern auch die .class der Compilation gefunden. Also, es erzeugt die Quelldatei und kompiliert sie. Warum funktioniert die Kompilierung von Dateien nicht? Es scheint ein Ordnungsproblem zu sein, so wie die generierte Quelle zum Zeitpunkt der Kompilierung der anderen Quellen noch nicht fertig ist.

+0

müssen Sie nicht auch das APT-Plugin anwenden? – EpicPandaForce

+0

@EpicPandaForce, ich denke ich nicht. Weil das 'com.neenbedankt.android-apt' für die Verwendung mit einem Android-Projekt gedacht ist. Dieses Modul meines Projekts ist reines Java. Wie auch immer, die aktuelle Version des Android-APT hat einen Fehler bei Komponententests. –

Antwort

6

Dank @EpicPandaForce habe ich angefangen zu verschleißen, wenn es auch ein APT-Plugin für reines Java gibt. Nach der Suche, fand ich eine dieser:

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

Ich bewerben ich genau das Plugin und änderte meine Abhängigkeiten mit apt und testApt.

+0

Für diejenigen unter uns, die den standard * test * -Ordner verwenden, fügen Sie einfach * testApt 'com.google.dagger: dagger-compiler: 2.2' * hinzu. Sofern Sie kein separates Modul verwenden, müssen Sie das reine Java APT-Plugin nicht verwenden – Maragues

Verwandte Themen