So beheben Sie den Fehler "Fehler beim Beheben von: org.jetbrains.kotlin: kotlin-stdlib-jre7 ..." beim Erstellen in Android Studio

78

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?

Google
quelle
1
Hallo @Google, willkommen bei StackOverflow . Sie können einen Blick auf "Fragen" werfen , um diese und zukünftige Fragen zu verbessern. Insbesondere sollten Sie einige "Forschungsanstrengungen" und / oder Code bereitstellen , um zu beweisen, dass Sie bereits versucht haben, das Problem selbst zu lösen.
Luis Miguel Mejía Suárez
@ LuisMiguelMejíaSuárez Vielen Dank, ich werde "wie man fragt" schauen und den anderen machen :)
Google

Antworten:

161

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-jdk7stattdessen. Es ist die gleiche Abhängigkeit wie kotlin-stdlib-jre7(außer neueren), aber es wurde umbenannt in kotlin-stdlib-jdk. kotlin-stdlib-jrewird 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 weiterhin

Sie 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 $kotlinVersionist entweder eine Variable, die die Version enthält, oder eine fest codierte Version (dh 1.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-jdk7Java 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 ändern kotlin-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_versionoder org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version(abhängig von der ursprünglich verwendeten Version).

Zoe
quelle
3
Warten Sie, wo haben Sie diese Codezeile geändert oder sogar hinzugefügt?
Jonathan
2
@ Jonney build.gradlefür das Modul. Wenn Sie ein anderes Build-System verwenden, müssen Sie den entsprechenden Code für dieses System finden. Der Punkt ändert sich kotlin-stdlib-jre7zu kotlin-stdlib-jdk7(oder 8), wo er zusätzlich zum Anstoßen der Version verwendet wird.
Zoe
2
Cool, danke, ich habe es behoben, indem ich es zum Gradle-Abhängigkeitsteil hinzugefügt habe
Jonathan
34

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'

Soumen Das
quelle
7

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'
NIRMAL KUMAR
quelle