Błąd: Nie można znaleźć org.jetbrains.kotlin: kotlin-stdlib-jdk8: 1.3.60-eap-25 w Ionic 3

81

Nagle pojawia się następujący błąd podczas tworzenia aplikacji Ionic 3 na Androida.

Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25

Mamy tutaj jedno rozwiązanie z Android Studio , ale po wprowadzeniu zmian w moim build.gradle z następującym kodem nadal pojawia się błąd.

buildscript {
    repositories {
        ...
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }
}

allprojects {
    repositories {
        ...
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }
}

Mój plik build.gradle wygląda tak po zaktualizowaniu Cordova i dodaniu powyższego rozwiązania.

buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    dependencies {
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath 'com.android.tools.build:gradle:3.3.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    //This replaces project.properties w.r.t. build settings
    project.ext {
      defaultBuildToolsVersion="28.0.3" //String
      defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4
      defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default
      defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Wciąż ten sam błąd.

Tapas Mukherjee
źródło
Czy faktycznie umieściłeś ...i usunąłeś inne repozytoria, które już tam były?
ianhanniballake
Nie. Właśnie zmieniłem adres uraven.
Tapas Mukherjee
Jak więc wygląda plik build.gradle, jeśli nie jest to, co opublikowałeś? Ponieważ komunikat o błędzie mówi, że usunąłeś repozytorium, w którym gradle:3.0.1się znajduje.
ianhanniballake
Sprawdź opis. Dodałem mój kod build.gradle. Właśnie zmieniłem adres URL.
Tapas Mukherjee
Powinieneś dodawać tylko nowe linie, a nie zastępować istniejące. Którą linię zamieniłeś?
ianhanniballake

Odpowiedzi:

75

Problem leży we cordova-support-google-serviceswtyczce do Cordova.

Ta wtyczka build.gradlewygląda na dzień dzisiejszy (24 października 2019 r.):

dependencies {
    classpath 'com.android.tools.build:gradle:+'
    classpath 'com.google.gms:google-services:4.2.0'
}

Dokładniej problem tkwi w tej zależności:

classpath 'com.android.tools.build:gradle:+'

To niezwykle kruchy sposób określania zależności. Znak „+” oznacza tutaj „pobierz najnowszą wersję dostępną w repozytorium”. Jeśli w repozytorium opublikowana zostanie nowsza wersja, która zepsuje kompilację, wówczas wszyscy z tą wtyczką mają zepsute projekty. To się stało dzisiaj. Pobierana jest zepsuta wersja com.android.tools.build:gradle:4.0.0. Wymaga trochę rzeczy Kotlin.

Dlatego musisz ZAWSZE zamrozić zależności, aby niezawodnie zbudować swój projekt. Nigdy nie ufaj nowszym rzeczom. Ta zależność dobrze się kompiluje, tak jak wczoraj:

classpath 'com.android.tools.build:gradle:3.5.1'

Dla tych, którzy używają Cordova lub Ionic, możesz dokonać szybkiej poprawki, aby móc zbudować projekt, zamrażając zależność w pliku:

<projectroot>/platforms/android/cordova-support-google-services/<project>-build.gradle

Nie jest to jednak ostateczne rozwiązanie. Jeśli ponownie zainstalujesz platformę Android za pośrednictwem Cordova, błąd pojawi się ponownie. Opiekun projektu powinien albo zawiesić zależność, albo naprawić ją, aby obsługiwała klasę 4.0.0. W międzyczasie skorzystaj ze stałego rozwidlenia tej wtyczki.

Pan Smith
źródło
Ponieważ mówimy o rozwiązaniu tymczasowym, jest to dla mnie najszybsze i wyjaśniające rozwiązanie. Dzięki
Tapas Mukherjee
Mam jednak pytanie. Jeśli moja aplikacja jest już zbudowana i jest zainstalowana na telefonie, czy użycie „+” w zależnościach może spowodować przerwanie działania aplikacji? W aplikacji występuje wiele zależności i trudno jest utrzymać ich wersję.
Tapas Mukherjee
1
Kompiluję moją aplikację za pomocą Phonegap Build; Otrzymuję ten sam błąd, chociaż nie dodałem wtyczki „cordova-support-google-services”. Jakieś sugestie? W szczególności, jak mogę to naprawić w moim pliku config.xml?
peterk
1
@peterk tutaj poprawka dla kompilacji phonegap community.adobe.com/t5/PhoneGap/…
r1si
3
Wtyczka cordova-support-google-services wydała już nową wersję ^ 1.3.2, w której zamraża zależności rozwiązujące problem. Odpowiedzi powinny być zaktualizowane, aby to odzwierciedlić.
le0diaz,
30

EDYCJA 10/28/19:

Cordova-support-google-services została dziś zaktualizowana do wersji 1.3.2, która zmienia ścieżkę klasy classpath 'com.android.tools.build:gradle:+'

do

classpath 'com.android.tools.build:gradle:3.+'

co wydaje się naprawiać błąd kotlin

Oryginalna odpowiedź

Udało mi się zbudować mój, wykonując następujące czynności:

Edytowałem platformy-> android-> cordova-support-google-services-> myAppName-build.gradle

i zmienił się

maventCentral()

do

    maven { url "https://maven.google.com" }
    maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }

To rozwiązało błąd kotlin, wtedy dostałem inny błąd, który rozwiązałem przez zmianę

classpath 'com.google.gms:google-services:4.2.0'

do

classpath 'com.google.gms:google-services:4.1.0'

Następnie zbudowano pomyślnie.

DanielRead
źródło
musiał zmienić << do do Ostatnio na platformach / android / app / build.gradle, zgodnie z stackoverflow.com/a/55793096/2393822
umadesign
2
@JimBergman Mam adres URL kotlin z oficjalnej strony Android Studio: referencja androidstudio.googleblog.com/2019/10/…
DanielRead
1
Przewiń w dół do sekcji zatytułowanej „Znany problem związany z repozytorium Missing Kotlin Maven”
Daniel Przeczytać
@Daniel Przeczytaj dzięki Widzę to teraz. Nadal nie sądzę, że odwołanie się do plików w bintray.com jest sposobem na obejście problemu. Powyższe rozwiązanie pana Smitha jest znacznie lepsze.
Jim Bergman
1
Aby zaktualizować wtyczkę, uruchom: cordova plugin rm cordova-support-google-services --force && cordova plugin add cordova-support-google-services
Klemens Zleptnig
29

Oto rozwiązanie.

Problemem było dokładnie repozytorium maven ( tutaj ), ale problem dotyczył build.gradle z wtyczki cordova-support-google-services , więc dodałem wymaganą linię i wszystko jest w porządku, już utworzyłem pull wniosek do pierwotnego repozytorium ( tutaj ). Ale w międzyczasie możesz zrobić to, co zrobiłem, po prostu zastąp w pakiecie.json bieżącą wersję moim repozytorium:

Przed:

...
"cordova-support-google-services": "^1.3.1",
...

Po:

...
"cordova-support-google-services": "https://github.com/LuisEGR/cordova-support-google-services.git",
...

po tym będziesz musiał:

  • Usuń foldery z platform i wtyczek
  • biegać npm install

Jest to rozwiązanie tymczasowe, podczas gdy żądanie ściągnięcia do głównego repozytorium zostaje zaakceptowane, a pakiet npm zaktualizowany

i to wszystko, teraz możesz ponownie zbudować swój projekt.


Korzystam z Ionic 4, a niektóre wtyczki wymagają cordova-support-google-services, w przypadku, gdy nie masz go w pakiecie.json, błąd może być związany z inną wtyczką, jeśli tak, dodaj pakiet.json, abyśmy mogli dowiedzieć się, która z nich jest problem.


AKTUALIZACJA 24 / PAŹDZIERNIKA:

Zmieniłem rozwiązanie w moim repozytorium, jak sugerowało wielu z was, teraz rozwiązanie skupia się tylko na naprawie zależności: z: com.android.tools.build:gradle:+ na classpath com.android.tools.build:gradle: 3. + , to już jest w moim repozytorium, jeśli chcesz zobaczyć, co się zmieniło

Luis Gonzalez
źródło
Jak długo zwykle zajmuje zatwierdzenie czegoś w tym repozytorium?
AndySousa,
7

w moim projekcie naprawiam tak. (mój projekt w kotlin)

buildscript{

    repositories {
         google()
         jcenter()
         ......
         maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

}

allprojects {
    repositories {
         google()
         jcenter()
         ......
         maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
   }
}
Ven Ren
źródło
6

Rozwiązanie dla Ionic v3 i Cordova

@Mister Smith rozwiązał mój problem

musisz przejść do pliku

platforms/android/cordova-support-google-services

następnie

Zastąpić

classpath 'com.android.tools.build:gradle:+'

przez

classpath 'com.android.tools.build:gradle:3.5.1'

@ Alternatywne rozwiązanie, które znalazłem to

setup kotlin in your system :)
Sayed Mohd Ali
źródło
To działa. Dziękuję Ci. Myślę, że możemy ustawić tę samą wersję do wersji z pliku build.gradle
Nguyen Tran
1
@NguyenTran Myślę, że skonfigurowanie Kotlina w twoim systemie z Android Studio jest najbardziej zaawansowanym i najlepszym rozwiązaniem, jeśli chcesz korzystać z najnowszej wersji Gradle, w przeciwnym razie trzymaj się starszej wersji wersji obsługiwanej przez twój projekt. lub poszukaj najlepszej obsługi stopni dla ionic v3.
Sayed Mohd Ali,
5

Jako kolejna tymczasowa poprawka w odpowiedzi na sugestię @MisterSmith, użyj haka, aby ponownie zastosować blokadę:

<hook src="scripts/fix_android_dep.sh" type="after_platform_add"/>

z tym zbyt trudnym kodem bashowym:

#!/usr/bin/env bash

## temporary fix for android studio EAP issue
## SOURCE: https://stackoverflow.com/a/58536638/56545
if [ -d "platforms/android/cordova-support-google-services" ]; then
  file="platforms/android/cordova-support-google-services/app-build.gradle"
  from="classpath 'com.android.tools.build:gradle:+'"
  to="classpath 'com.android.tools.build:gradle:3.5.1'"

  change=`sed "s/$from/$to/" < "$file"`
  echo "$change" > "$file"
fi
Greg Haygood
źródło
1
Pracowałem dla mnie po zmianie app-build.gradlena %MY_APP_NAME%-build.gradle. Dzięki!
Alexander Zinchuk
3

Musiałem dodać maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }zarówno do najwyższego poziomu, jak build.gradlei do appmodułu build.gradle. W obu przypadkach zarówno do, jak buildscripts.repositoriesi doallprojects.repositories

Alexander Kulyakhtin
źródło
2

Żadne z powyższych nie działało dla mnie. W końcu usunąłem wtyczkę usług Google i dodałem ją.

cordova plugin rm cordova-support-google-services cordova plugin add cordova-support-google-services

Mężczyzna nazywa się Haney
źródło
To jedyna odpowiedź, która faktycznie rozwiązała problem. Usunięcie i dodanie wtyczki poprawia wszystko, co powinno zostać poprawione w pliku build.gradle.
Felipe Ferri,