FEHLER: error.NonExistentClass Kotlin In Multimodul-Dagger-Projekt
Lesezeit: 4 Minuten
Sebastianus Kurniawan
Ich verwende Dagger 2 und Kotlin für die Android-Entwicklung. Mein Projekt ist auch ein Multi-Modul-Projekt. Meine settings.gradle-Datei sieht so aus:
include :app
include :lib
Ich pflege auch das lib-Modul.
In den Dolchdateien (zum Beispiel in der Komponente) versuche ich, das Element aus einem anderen Modul zu erhalten. Zum Beispiel:
@Component
interface AppComponent{
fun getPresenter() : Presenter
}
Das Presenter-Objekt ist im lib-Modul definiert. Ich habe in einer Linux-Umgebung gearbeitet und verwende Android Studio 3 Preview Canary 5. Der Code funktioniert gut und ich kann APK generieren.
Aber mein Unternehmen wollte das APK mit der stabilen Version von Android Studio generieren. Ich verwende Android Studio 2.3.3.
Beim Kompilieren des Android-Projekts ist dieser Fehler aufgetreten:
error: error.NonExistentClass
Der Fehler tritt auf, wenn
:app:kaptDebugKotlin
ausgeführt wird und dadurch verursacht wird, dass die Dagger-Klasse nicht gefunden werden kann, ist die Klasse in dem anderen Projekt definiert. Was kann die mögliche Problemumgehung dafür sein? Entschuldigung für mein schlechtes Englisch.
Können Sie die Gradle-Dateien Ihres Projekts und Moduls posten?
– jayeshsolanki93
14. Juli 2017 um 9:53 Uhr
kannst du die Ausgabe auch aus posten ./gradlew build --info --stacktrace
– günhter
14. Juli 2017 um 9:54 Uhr
seyfullah.bilgin
Fügen Sie dies einfach hinzu, um die Gradle-Datei zu erstellen, um die damit verbundenen Probleme zu vermeiden NonExistentClass
Dies hat mir geholfen, ein echtes Problem zu finden. Vor dem Hinzufügen war der Fehler irreführend
– Fartab
23. Oktober 2019 um 18:15 Uhr
Dies sollte die akzeptierte Antwort sein, da Sie zum eigentlichen Problem gelangen.
– Khurram Shahzad
10. Januar 2020 um 18:48 Uhr
Danke, du bist ein Lebensretter. meine probleme traten auch auf, wenn das android studio gezwungen war, androidx zu verwenden ViewBinding
– mochadwi
26. Februar 2020 um 11:03 Uhr
Sollte es nicht sein correctErrorTypes = true ?
– EndermanAPM
5. August 2021 um 13:49 Uhr
Bei einer kt-Gradle-Datei konnte sie ohne = nicht für mich erstellt werden
– EndermanAPM
10. August 2021 um 10:57 Uhr
Iman Akbari
Die Grundursache
Im Grunde kann man nicht viel dagegen tun beim Benutzen kapt. Zitieren dieser Link die das gleiche Problem in einer anderen Bibliothek angeht, die Präprozessoren verwendet (OrmaDatabase):
Da Kotlin seine Stubs erstellt, bevor Java Annotation Processing ausgeführt wird, weiß Kotlin nichts über OrmaDatabase, und der Name der Deklaration in Stubs lautet error.NonExistentClass. Dadurch wird das Anmerkungsverarbeitungswerkzeug beschädigt. Es ist eine Art Kapt-Beschränkung
So beheben Sie das Problem (der Workaround)
Einfach normal verwenden apt oder annotationProcessor zum Ausführen des Dagger-Compilers. Sobald ich gewechselt habe:
kapt libs.daggerCompiler
zu
annotationProcessor libs.daggerCompiler
in meiner Modulstufe build.gradle Datei konnte ich die Fehler bekommen. Nachdem Sie die Fehler behoben haben, müssen Sie die Leitung wieder auf zurücksetzen kapt da sonst keine Dolchklassen generiert würden, da sie in Kotlin definiert sind.
Sie können auch laufen ./gradlew :app:compileDebugJavaWithJavac --stacktrace um die Fehlerquelle herauszufinden.
– starkej2
12. Dezember 2017 um 21:54 Uhr
Ich hatte eine sehr ähnliche Situation mit a NonExistentClass Fehler in einem Projekt mit mehreren Modulen, das Dagger verwendet, und es stellt sich heraus, dass ich vergessen habe, die Kotlin-Bibliotheksabhängigkeit hinzuzufügen. Also, nur das Hinzufügen im Untermodul löste mein Problem:
Hatte fast das gleiche – in meinem Fall habe ich vergessen hinzuzufügen kotlin-android plugin zum build.gradle des Moduls.
– Wjatscheslaw
11. Juli 2019 um 11:16 Uhr
tldr: Ändern Sie kapt in annotationProcessor in build.gradle und Sie werden das eigentliche Problem sehen.
Ich habe den gleichen Fehler erhalten, und es stellte sich heraus, dass ich gerade eine Klasse auskommentiert habe, die ich in meiner AppComponent verwendet habe. Leider hat mir das Kapt-Tool nicht die richtige Fehlermeldung gegeben. Wenn Sie kapt im Compiler Ihrer Bibliothek in annotationProcessor ändern und versuchen zu bauen, wird es auch nicht gelingen, aber Sie erhalten eine detailliertere Fehlermeldung.
In meinem Fall hatte ich @Nullable Anmerkung von Support-Anmerkungenwährend ich es entfernt hatte, um zu migrierenAndroidX.
Da die Anmerkung beim Erstellen nicht korrekt importiert wurde, wurde sie als ungültig erkannt.
Was ich tat, war, den Code zu überprüfen und alle Importe zu reparieren.
Das war eigentlich mein Problem. Vielen Dank!
– dipdipdip
6. November 2019 um 19:21 Uhr
Ersetzen aller Importe von org.jetbrains.annotations.Nullable zu androidx.annotation.Nullable hat das Problem für mich behoben
class MainViewModel @ViewModelInject constructor(
...
) : ViewModel() {
zu
@HiltViewModel
class MainViewModel @Inject constructor(
...
) : ViewModel() {
Das war eigentlich mein Problem. Vielen Dank!
– dipdipdip
6. November 2019 um 19:21 Uhr
Ersetzen aller Importe von org.jetbrains.annotations.Nullable zu androidx.annotation.Nullable hat das Problem für mich behoben
– Vaibhav Jani
14. November 2020 um 6:14 Uhr
GoRoS
Ich habe festgestellt, ob Sie verwenden
kapt {
generateStubs = true
}
Wenn Sie zu false wechseln, wird der eigentliche Fehler angezeigt. Sie werden wahrscheinlich Probleme beim Erstellen des Dolchdiagramms haben, sobald die Kompilierungsprobleme behoben wurden, aber ändern Sie einfach wieder zu true, und Sie sollten gut sein
12052700cookie-checkFEHLER: error.NonExistentClass Kotlin In Multimodul-Dagger-Projektyes
Können Sie die Gradle-Dateien Ihres Projekts und Moduls posten?
– jayeshsolanki93
14. Juli 2017 um 9:53 Uhr
kannst du die Ausgabe auch aus posten
./gradlew build --info --stacktrace
– günhter
14. Juli 2017 um 9:54 Uhr