Utilisation de Gradle

Modifier la page

Pour construire un projet Kotlin avec Gradle, vous devez appliquer le plugin Kotlin Gradle à votre projet et configurer les dépendances.

Plugin et versions

Appliquez le plugin Kotlin Gradle en utilisant le DSL des plugins Gradle.

Le plugin Kotlin Gradle 1.4.30 fonctionne avec Gradle 5.4 et plus. Le plugin kotlin-multiplatformnécessite Gradle 6.0 ou plus récent.

plugins { id 'org.jetbrains.kotlin.<...>' version '1.4.30'}
plugins { kotlin("<...>") version "1.4.30"}

Le caractère générique <...> doit être remplacé par l’un des noms de plugins que l’on trouve dans les sections suivantes.

Cibler plusieurs plateformes

Les projets ciblant plusieurs plateformes, appelés projets multiplateformes, nécessitent le plugin kotlin-multiplatform. En savoir plus sur ce plugin.

Le plugin kotlin-multiplatform fonctionne avec Gradle 6.0 ou plus récent.

plugins { id 'org.jetbrains.kotlin.multiplatform' version '1.4.30'}
plugins { kotlin("multiplatform") version "1.4.30"}

Cibler la JVM

Pour cibler la JVM, appliquez le plugin Kotlin JVM.

plugins { id "org.jetbrains.kotlin.jvm" version "1.4.30"}
plugins { kotlin("jvm") version "1.4.30"}

Le version doit être littéral dans ce bloc, et il ne peut pas être appliqué depuis un autre script de construction.

Alternativement, vous pouvez utiliser l’ancienne approche apply plugin:

apply plugin: 'kotlin'

Il n’est pas recommandé d’appliquer les plugins Kotlin avec apply dans Gradle Kotlin DSL – voir pourquoi.

Sources Kotlin et Java

Les sources Kotlin peuvent être stockées avec les sources Java dans le même dossier, ou placées dans des dossiers différents. La convention par défaut consiste à utiliser des dossiers différents :

project - src - main (root) - kotlin - java

La propriété sourceSets correspondante doit être mise à jour si l’on n’utilise pas la convention par défaut :

sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' main.java.srcDirs += 'src/main/myJava'}
sourceSets.main { java.srcDirs("src/main/myJava", "src/main/myKotlin")}

Cibler JavaScript

Lorsque l’on cible uniquement JavaScript, il faut utiliser le plugin kotlin-js. En savoir plus

plugins { id 'org.jetbrains.kotlin.js' version '1.4.30'}
plugins { kotlin("js") version "1.4.30"}

Sources Kotlin et Java

Ce plugin ne fonctionne que pour les fichiers Kotlin, il est donc recommandé de conserver les fichiers Kotlin et Java séparément (au cas où le projet contient des fichiers Java). Si vous ne les stockez pas séparément , spécifiez le dossier source dans le bloc sourceSets:

kotlin { sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' }}
kotlin { sourceSets.apply { kotlin.srcDir("src/main/myKotlin") }}

Targeting Android

Il est recommandé d’utiliser Android Studio pour créer des applications Android. Apprenez à utiliser le plugin Android Gradle.

Configurer les dépendances

Pour ajouter une dépendance à une bibliothèque, définissez la dépendance du type requis (par exemple, implementation) dans le bloc dependencies du DSL des ensembles de sources.

kotlin { sourceSets { commonMain { dependencies { implementation 'com.example:my-library:1.0' } } }}
kotlin { sourceSets { val commonMain by getting { dependencies { implementation("com.example:my-library:1.0") } } }}

Alternativement, vous pouvez définir des dépendances au niveau supérieur.

Types de dépendance

Choisissez le type de dépendance en fonction de vos besoins.

Type Description Quand utiliser
api Utilisé à la fois pendant la compilation et à l’exécution et est exporté vers les consommateurs de la bibliothèque. Si un type d’une dépendance est utilisé dans l’API publique du module actuel, utilisez une dépendance api.
implementation Utilisé pendant la compilation et à l’exécution pour le module actuel, mais n’est pas exposé pour la compilation d’autres modules dépendant de celui avec la dépendance `implementation`.

Utiliser pour les dépendances nécessaires à la logique interne d’un module.

Si un module est une application de point de terminaison qui n’est pas publiée, utiliser les dépendances implementation au lieu des dépendances api.

compileOnly Utilisé pour la compilation du module actuel et n’est pas disponible à l’exécution ni pendant la compilation d’autres modules. Utilisé pour les API qui ont une implémentation tierce disponible à l’exécution.
runtimeOnly Disponible au moment de l’exécution mais n’est pas visible pendant la compilation de tout module.

Dépendance de la bibliothèque standard

Une dépendance d’une bibliothèque standard (stdlib) dans chaque ensemble de sources est ajoutée automatiquement. La version de la bibliothèque standard est la même que la version du plugin Kotlin Gradle.

Pour les ensembles de sources spécifiques à une plateforme, la variante de la bibliothèque spécifique à la plateforme correspondante est utilisée, tandis qu’une bibliothèque standard commune est ajoutée au reste. Le plugin Kotlin Gradle sélectionnera la bibliothèque standard JVM appropriée en fonction de l’option de compilation kotlinOptions.jvmTarget de votre script de construction Gradle.

Si vous déclarez explicitement une dépendance de bibliothèque standard (par exemple, si vous avez besoin d’une version différente), le plugin Kotlin Gradle ne la remplacera pas ou n’ajoutera pas une deuxième bibliothèque standard.

Si vous n’avez pas du tout besoin d’une bibliothèque standard, vous pouvez ajouter le drapeau d’exclusion au gradle.properties:

kotlin.stdlib.default.dependency=false

Déclarer les dépendances des bibliothèques de test

L’API kotlin.test est disponible pour tester différents projets Kotlin.

Ajouter les dépendances correspondantes sur les bibliothèques de test :

  • Pour commonTest, ajouter les dépendances kotlin-test-common et kotlin-test-annotations-common.
  • Pour les cibles JVM, utilisez kotlin-test-junit ou kotlin-test-testng pour l’implémentation de l’asserteur correspondant et le mappage des annotations.
  • Pour les cibles Kotlin/JS, ajoutez kotlin-test-js comme dépendance de test.

Les cibles Kotlin/Natives ne nécessitent pas de dépendances de test supplémentaires, et les implémentations de l’API kotlin.test sont intégrées.

Vous pouvez utiliser un raccourci pour une dépendance sur un module Kotlin, par exemple, kotlin(« test ») pour « org.jetbrains.kotlin:kotlin-test ».

Définir une dépendance sur une bibliothèque kotlinx

Si vous utilisez une bibliothèque kotlinx et que vous avez besoin d’une dépendance spécifique à la plateforme, vous pouvez utiliser des variantes de bibliothèques spécifiques à la plateforme avec des suffixes tels que -jvm ou -js, par exemple, kotlinx-coroutines-core-jvm. Vous pouvez également utiliser le nom d’artefact de base de la bibliothèque à la place – kotlinx-coroutines-core.

kotlin { sourceSets { jvmMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.2' } } }}

Si vous utilisez une bibliothèque multiplateforme et que vous avez besoin de dépendre du code partagé, définissez la dépendance une seule fois dans le jeu de sources partagées. Utilisez le nom d’artefact de base de la bibliothèque, tel que kotlinx-coroutines-core ou ktor-client-core.

kotlin { sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' } } }}

Définir les dépendances au niveau supérieur

Alternativement, vous pouvez spécifier les dépendances au niveau supérieur avec les noms de configuration suivant le modèle <sourceSetName><DependencyType>. Ceci est utile pour certaines dépendances intégrées à Gradle, comme gradleApi(), localGroovy(), ou gradleTestKit(), qui ne sont pas disponibles dans le DSL de dépendance des ensembles de sources.

dependencies { commonMainImplementation 'com.example:my-library:1.0'}
dependencies { "commonMainImplementation"("com.example:my-library:1.0")}

Traitement des annotations

Kotlin prend en charge le traitement des annotations via l’outil de traitement des annotations Kotlin kapt.

Compilation incrémentale

Le plugin Gradle Kotlin prend en charge la compilation incrémentale. La compilation incrémentale suit les modifications des fichiers sources entre les builds, de sorte que seuls les fichiers affectés par ces modifications seraient compilés.

La compilation incrémentale est prise en charge pour les projets Kotlin/JVM et Kotlin/JS et est activée par défaut depuis Kotlin 1.1.1.

Il existe plusieurs façons de désactiver le paramètre :

  • Ajouter la ligne suivante au fichier gradle.properties ou local.properties :
    • kotlin.incremental=false pour Kotlin/JVM
    • kotlin.incremental.js=false pour les projets Kotlin/JS
  • Comme paramètre de ligne de commande, utilisez -Pkotlin.incremental=false ou -Pkotlin.incremental.js=false.

    Notez que dans ce cas, le paramètre doit être ajouté à chaque build ultérieur, et que tout build avec une compilation incrémentale désactivée invalide les caches incrémentaux.

Notez que le premier build n’est pas incrémental dans tous les cas.

Support du cache de construction Gradle

Le plugin Kotlin supporte le cache de construction Gradle qui stocke les sorties de construction pour les réutiliser dans les futures constructions.

Pour désactiver la mise en cache pour toutes les tâches Kotlin, définissez l’indicateur de propriété système kotlin.caching.enabled à false (exécutez la construction avec l’argument -Dkotlin.caching.enabled=false).

Si vous utilisez kapt, notez que les tâches de traitement des annotations kapt ne sont pas mises en cache par défaut. Cependant, vous pouvez activer la mise en cache pour elles manuellement.

Prise en charge du cache de configuration de Gradle

Le cache de configuration est disponible dans Gradle 6.5 et les versions ultérieures en tant que fonctionnalité expérimentale.Vous pouvez vérifier la page des versions de Gradle pour voir si elle a été promue à stable.

Le plugin Kotlin prend en charge le cache de configuration Gradle,qui accélère le processus de construction en réutilisant les résultats de la phase de configuration.

Voir la documentation Gradlepour savoir comment activer le cache de configuration. Une fois que vous avez activé la fonctionnalité de cache de configuration, le plugin Kotlin Gradle commencera à l’utiliser.

Options de compilation

Pour spécifier des options de compilation supplémentaires, utilisez la propriété kotlinOptions d’une tâche de compilation Kotlin.

Lorsque vous ciblez la JVM, les tâches sont appelées compileKotlin pour le code de production et compileTestKotlinpour le code de test. Les tâches pour les ensembles de sources personnalisées sont appelées conformément au modèle compile<Name>Kotlin.

Les noms des tâches dans Android Projects contiennent les noms des variantes de construction et suivent le modèle compile<BuildVariant>Kotlin, par exemple, compileDebugKotlin, compileReleaseUnitTestKotlin.

Lorsque l’on cible JavaScript, les tâches sont appelées respectivement compileKotlinJs et compileTestKotlinJs, et compile<Name>KotlinJs pour les ensembles de sources personnalisées.

Pour configurer une seule tâche, utilisez son nom. Exemples :

compileKotlin { kotlinOptions.suppressWarnings = true}//orcompileKotlin { kotlinOptions { suppressWarnings = true }}

Notez qu’avec le DSL Kotlin de Gradle, vous devez obtenir la tâche à partir du tasks du projet en premier lieu.

Utilisez les types Kotlin2JsCompile et KotlinCompileCommon pour les cibles JS et Common, en conséquence.

Il est également possible de configurer toutes les tâches de compilation Kotlin dans le projet :

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { /*...*/ }}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { /*...*/ }}

La liste complète des options pour les tâches Gradle est la suivante :

Attributs communs pour JVM, JS, et JS DCE

Nom Description Valeurs possibles Valeur par défaut
allWarningsAsErrors Reporter une erreur s’il y a des avertissements false
suppressWarnings Générer aucun avertissement false
verbose Activer la sortie de journalisation verbeuse . false
freeCompilerArgs Une liste d’arguments supplémentaires pour le compilateur

Attributs communs à la JVM et à la JS

Attributs spécifiques à la JVM

.

Nom Description Valeurs possibles Valeur par défaut
javaParameters Générer des métadonnées pour la réflexion Java 1.8 sur les paramètres des méthodes false
jdkHome Inclure un JDK personnalisé depuis l’emplacement spécifié dans le classpath au lieu du JAVA_HOME par défaut
jvmTarget Version cible du bytecode JVM généré « 1.6 », « 1.8 », « 9 », « 10 », « 11 », « 12 », « 13 », « 14 », « 15 » « 1.6 »
noJdk Ne pas inclure automatiquement le runtime Java dans le classpath false
noReflect Ne pas inclure automatiquement la réflexion Kotlin dans le classpath true
noStdlib Ne pas inclure automatiquement la stdlib Kotlin/JVM et la réflexion Kotlin dans le classpath true
useIR Utiliser le backend IR false

Attributs spécifiques pour JS

.

.

Nom Description Valeurs possibles Valeur par défaut
friendModulesDisabled Désactiver l’exportation des déclarations internes false
main Définir si la fonction main doit être appelée à l’exécution « call », « noCall » « call »
metaInfo Générer des fichiers .meta.js et .kjsm avec des métadonnées. A utiliser pour créer une bibliothèque true
moduleKind Le type de module JS généré par le compilateur « umd », « commonjs », « amd », « plain » « umd »
noStdlib Ne pas inclure automatiquement le stdlib Kotlin/JS par défaut dans les dépendances de la compilation true
outputFile Destination *.js pour le résultat de la compilation « <buildDir>/js/packages/<projet.name>/kotlin/<projet.name>.js »
sourceMap Générer une carte des sources vrai
sourceMapEmbedSources Intégrer les fichiers sources dans la carte des sources « jamais », « toujours », « inlining »
sourceMapPrefix Ajouter le préfixe spécifié aux chemins dans la carte des sources
target Générer des fichiers JS pour une version ECMA spécifique « v5 » « v5 »
typedArrays Transformer les tableaux primitifs en tableaux typés JS true

Générer de la documentation

Pour générer de la documentation pour les projets Kotlin, utilisez Dokka ;veuillez vous référer au README de Dokka pour les instructions de configuration. Dokka prend en charge les projets en langage mixte et peut générer une sortie dans plusieurs formats, y compris JavaDoc standard.

OSGi

Pour le support OSGi, voir la page OSGi de Kotlin.

Utilisation de Gradle Kotlin DSL

Lorsque vous utilisez Gradle Kotlin DSL, appliquez les plugins Kotlin en utilisant le bloc plugins { ... }. Si vous les appliquez avec apply { plugin(...) } à la place, vous pouvez rencontrer des références non résolues aux extensions générées par Gradle Kotlin DSL. Pour résoudre cela, vous pouvez commenter les usages erronés, exécuter la tâche Gradle kotlinDslAccessorsSnapshot, puis décommenter les usages en retour et réexécuter la construction ou réimporter le projet dans l’IDE.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.