2015-06-08 13 views
9

Cóż, jestem migracji mojego Android projekt korzystania z Clean architecure:Wygenerowany klasa dla Komponentu Dagger 2 nie znajduje się w compileTestJava Java Plugin Gradle za

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

Oznacza to, że część mojego kod znajduje się w module domeny (czysta Java, brak zależności z systemem Android). Do tego projektu używam Dagger 2, który generuje źródło za pomocą procesora adnotacji (podczas kompilacji).

mam Konfiguracja Poniższe Gradle dla mojego projektu:

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 
} 

W moim źródła testu stworzyłem TestComponent interfejsu i Dagger jest suposed wygenerowania DaggerTestComponent. Kiedy próbuję zbudować mój projekt za pomocą wiersza poleceń lub Android Studio, otrzymuję błędy kompilacji nie mogę znaleźć symbolu, a następnie: Wykonanie nie powiodło się dla zadania ": domain: compileTestJava '.

Próbowałem zmienić "dostarczone" na "kompiluj" i "testuj kompilację". Nadal nie działa.

Dziwne jest to, że po awarii kompilatoraTestJava mogę znaleźć wygenerowany plik DaggerTestComponent.java w domenie domain/build/classes/test. Więc jeśli jest generowany, dlaczego otrzymuję ten błąd kompilacji?

Należy pamiętać, że problem występuje tylko w źródle testowym. Wygenerowałem źródło Dagger 2 używane w głównym źródle.

UPDATE:

I komentuje każde miejsce, które starał się wykorzystać DaggerTestComponent i starał się budować ponownie. W domenie domain/build/classes/test mogę teraz znaleźć nie tylko DaggerTestComponent.java, ale także klasę .class w wyniku kompilacji. Tak więc generuje plik źródłowy i go kompiluje. Dlaczego kompilacja plików nie działa? Wygląda na to, że jakiś problem z zamówieniem, tak jak wygenerowane źródło, nie jest jeszcze gotowy w momencie kompilacji innych źródeł.

+0

nie musisz również stosować wtyczki APT? – EpicPandaForce

+0

@EpicPandaForce, myślę, że nie. Ponieważ "com.neenbedankt.android-apt" jest przewidziany do użycia z projektem Android. Ten moduł mojego projektu to czysta Java. W każdym razie aktualna wersja Androida-APT ma błąd z testami jednostkowymi. –

Odpowiedz

6

Dzięki @EpicPandaForce zacząłem zastanawiać się, czy istnieje wtyczka APT dla czystej Javy. Po poszukiwaniach, znalazłem ten jeden:

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

prostu zastosować tę wtyczkę i zmienił moje zależności apt i testApt.

+0

Dla tych z nas, którzy korzystają ze standardowego folderu * test *, po prostu dodaj * testApt "com.google.dagger: dagger-kompilator: 2.2 '*. Jeśli nie korzystasz z oddzielnego modułu, nie musisz używać czystej wtyczki Java APT – Maragues

Powiązane problemy