Ich habe ein neues Projekt erstellt, indem ich das Kontrollkästchen "Kotlin einschließen" in Android Studio 3 aktiviert habe. Beim Kompilieren wird sofort eine Fehlermeldung angezeigt
"Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7..."
Ich habe sichergestellt, dass alle Plugins auf dem neuesten Stand sind und das Android SDK ordnungsgemäß installiert ist.
Wie kann ich diesen Fehler beheben?
Antworten:
kotlin-stdlib-jre[7/8]
wurde vor einiger Zeit veraltet und wurde seitdem entfernt. Der Verfallsschein wurde bis zum 1.2.71 aufbewahrt. Dies war die letzte Version, in der diese Artefakte veröffentlicht wurden. Die offizielle Abschreibungsmitteilung finden Sie hier . Die Verwendung einer der veralteten Versionen (bevor sie entfernt wurde) sollte auch in (mindestens) Android Studio und IntelliJ eine Warnung erzeugen.Verwenden Sie
kotlin-stdlib-jdk7
stattdessen. Es ist die gleiche Abhängigkeit wiekotlin-stdlib-jre7
(außer neueren), aber es wurde umbenannt inkotlin-stdlib-jdk
.kotlin-stdlib-jre
wird jetzt nicht mehr als separate Abhängigkeit gepflegt.Sowohl IntelliJ als auch Android Studio generieren derzeit neue Projekte mit
kotlin-stdlib-jre7
; Dies ist wahrscheinlich ein Fehler . Sie haben die Projektgeneratoren wahrscheinlich nicht aktualisiert. Daher müssen Sie die Abhängigkeiten manuell durch funktionierende ersetzen, bis sie dies beheben. Dies hängt vom Kotlin-Plugin ab. Aktualisieren Sie es, wenn Sie es nicht getan haben. Ich habe nicht überprüft, ob es gepatcht wurde oder nicht - wenn ja, wird dadurch nur die Erstellung neuer Projekte behoben. Für die Aktualisierung von älteren Versionen gilt der Rest der Antwort weiterhinSie müssen dies natürlich tun, wenn Sie 1.2.71 oder niedriger verwenden und ein Upgrade auf 1.3.0 oder höher durchführen.
Dies sind die neuen gültigen Abhängigkeiten ab Kotlin 1.3.0:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
Wo
$kotlinVersion
ist entweder eine Variable, die die Version enthält, oder eine fest codierte Version (dh1.3.0
)Alternativ können Sie anstelle der JDK-spezifischen Versionen die "plain" stdlib (
kotlin-stdlib
) verwenden. Sie müssen Ihre Abhängigkeit jedoch in beide Richtungen ändern. Ich empfehle Ihnen daher,kotlin-stdlib-jdk7
Java 8 zu verwenden , oder wenn Sie Java 8 verwenden möchten.kotlin-stdlib-jdk8
Die neuesten Versionen der Abhängigkeiten finden Sie auch hier . jdk7, jdk8 und die version-unspezifische stdlib folgen alle denselben Versionen (gemäß dieser Bearbeitung - dies könnte sich in Zukunft ändern, aber es wird wahrscheinlich Hinweise geben, bevor diese Änderung erfolgt). Ob Sie also jdk8, jdk7 oder die überprüfen In der regulären Version sollten alle Versionen für alle stdlib-Artefakte universell verfügbar sein.
Hinweis für andere Build-Systeme
Die gleiche tatsächliche Lösung gilt auch für andere Build-Systeme, der Code ist jedoch unterschiedlich. Da es viele Build-Systeme gibt, werde ich nicht alle einbeziehen, aber es geht darum, das Artefakt von auf
kotlin-stdlib-jre[num]
zu ändernkotlin-stdlib-jdk[num]
(natürlich ohne Klammern). Oder, wie bereits erwähnt ,kotlin-stdlib
.Unabhängig vom Build-System basiert dies auf dem Zugriff auf Maven Central und ähnliche Repositorys. Wenn Ihr Build-System dies nicht unterstützt und / oder gegen Konventionen und Repositorys im Maven-Stil verstößt, müssen Sie herausfinden, was für Ihr Build-System funktioniert.
TL; DR:
Verwenden Sie stattdessen
org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version
oderorg.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version
(abhängig von der ursprünglich verwendeten Version).quelle
build.gradle
für das Modul. Wenn Sie ein anderes Build-System verwenden, müssen Sie den entsprechenden Code für dieses System finden. Der Punkt ändert sichkotlin-stdlib-jre7
zukotlin-stdlib-jdk7
(oder 8), wo er zusätzlich zum Anstoßen der Version verwendet wird.Entfernen Sie diese Zeile aus dem build.gradle:
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
Fügen Sie diese Zeile in das build.gradle ein:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
Aktualisieren Sie die Version build.gradle auf Projektebene: kotlin version = '1.3.0'
quelle
In build.gradle ( Modul: App ) ersetzen
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
mit
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
und in build.gradle ( Modul: Projekt ) ändern Sie die Version in
ext.kotlin_version = '1.3.0'
quelle
Überprüfen Sie im Allgemeinen die verfügbaren Artefakte unter
quelle