différentes versions de kotlin dans le projet Android
Je ne peux pas comprendre quel problème je peux avoir si j'ai différentes versions de Kotlin dans le projet et dans les dépendances de ce projet.
Option 1:
- le projet inclut Kotlin
1.3.72 - certaines bibliothèques (
okhttppar exemple) incluent Kotlin1.4.10. ( Nous utilisons maintenant les interfaces fonctionnelles Kotlin 1.4.x pour Authenticator, Interceptor et autres. )
Option 2:
- le projet inclut Kotlin
1.4.0 - certaines bibliothèques incluent Kotlin
1.3.71
Dans l'option 2, j'obtiens l'avertissement suivant:
w: Les fichiers JAR d'exécution dans le chemin de classe doivent avoir la même version. Ces fichiers ont été trouvés dans le classpath: /.gradle/caches/transforms-2/files-2.1/ab41544fa06f7b55dec847efe3b9899c/jetified-kotlin-stdlib-jdk7-1.3.71.jar (version 1.3) .gradle / caches / transforms-2 / files-2.1 / a4c6c3b949eb40b555dea1468ae75f87 / jetified-kotlin-stdlib-1.4.10.jar (version 1.4) .gradle / caches / transforms-2 / files-2.1 / f98f62bf33e752598311020043618780 / jetified-kotlin-stdl.jar (1.4.10 version 1.4)
w: Certains fichiers JAR d'exécution dans le chemin de classe ont une version incompatible. Envisagez de les supprimer du classpath
Réponses
/.gradle/caches/transforms-2/files-2.1/ab41544fa06f7b55dec847efe3b9899c/jetified-kotlin-stdlib-jdk7-1.3.71.jar (version 1.3)
cela peut être résolu en incluant ceci dans les dépendances build.gradle de votre application:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
De plus, j'ai personnellement appris à ajouter les dépendances suivantes pour éviter ces erreurs:
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
Assurez-vous également d'avoir ext.kotlin_version = "1.4.10"dans votre projet build.gradle
Quels problèmes pouvez-vous rencontrer? Lorsque les différences ne sont pas seulement dans la version mineure (comme 1.3.70 / 1.3.72) mais se situent entre une version 1.3.x et une version 1.4.x, vous risquez par exemple qu'une bibliothèque utilise une fonction qui a changé sa signature dans la nouvelle version, et il y aura donc une erreur d'exécution. Cela ne se produit pas nécessairement, mais cela peut arriver (à moins que vous ne sachiez avec certitude que vos bibliothèques de dépendances n'utilisent aucune fonction qui a changé).
Si votre projet cible Java 8, incluez simplement la dépendance à cette version Java
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
Suivez la même règle si vous ciblez Java 6 ou 7.
Vous clarifiez plus à ce sujet dans le post https://medium.com/@mbonnin/the-different-kotlin-stdlibs-explained-83d7c6bf293