3
votes

Projet multiplateforme IntelliJ Kotlin Synchronisation Gradle très longue

J'ai créé un nouveau projet Kotlin Multiplatform pour Andrid et iOS (Mobile shared Library). Le projet fonctionne bien, mais chaque fois que j'exécute la synchronisation Gradle , cela prend plus de 5 minutes à chaque fois. Il reste toujours bloqué sur la même ligne:

Gradle: Construisez le modèle 'org.jetbrains.kotlin.gradle.KotlinMPPGradleModel' pour le projet racine 'MyProject'

Pourquoi cela prend-il autant de temps chaque fois?

J'utilise Gradle version 5.1. Voici mon fichier build.gradle :

buildscript {
    ext.kotlin_version = '1.3.11'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.8.1"
    }
}
plugins {
    id 'kotlin-multiplatform' version '1.3.11'
}
repositories {
    google()
    jcenter()
    mavenCentral()
    maven { url 'https://jitpack.io' }
}
repositories {
    mavenCentral()
}
group 'com.example'
version '0.0.1'

apply plugin: "com.android.library"
apply plugin: "com.jfrog.artifactory"
apply plugin: 'maven-publish'

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName version
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions.incremental = false
}

kotlin {
    targets {
        fromPreset(presets.android, 'android')
        // This preset is for iPhone emulator
        // Switch here to presets.iosArm64 to build library for iPhone device
        fromPreset(presets.iosX64, 'ios') {
            compilations.main.outputKinds('FRAMEWORK')
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
            }
        }
        commonTest {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-test-common'
                implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
            }
        }
        androidMain {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-stdlib'
            }
        }
        androidTest {
            dependencies {
                implementation 'org.jetbrains.kotlin:kotlin-test'
                implementation 'org.jetbrains.kotlin:kotlin-test-junit'
            }
        }
        iosMain {
        }
        iosTest {
        }
    }
}

configurations {
    compileClasspath
}

Capture d'écran du problème:

 entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

Essayez d'exécuter la tâche Gradle à partir des lignes de commande avec l'option --parallel.

Sinon, parcourez ce guide pour profiler l'exécution de Gradle https://guides.gradle.org/performance/ < / a>


1 commentaires

J'ai déjà tout essayé dans ce guide. Le problème n'est pas avec la construction qui est rapide, c'est seulement avec la synchronisation.



4
votes

Il existe un problème connu où les dépendances Kotlin / Native sont de nouveau récupérées à chaque synchronisation, ce qui peut être ce que vous voyez. Vous pouvez voir les détails et les suivre ici .

Comme indiqué sur ce problème, il existe une solution de contournement que vous pourrez peut-être essayer, qui consiste essentiellement à ajouter {content {excludeGroup ("Kotlin / Native"}} à chaque élément de vos dépôts. bloc.


1 commentaires

La mise à niveau vers la dernière version (Kotlin 1.3.21 et Gradle 5.2.1 ) a résolu ce problème pour moi.



1
votes

Comme @Brucelet l'a souligné, il s'agit d'un problème connu . Pour compléter sa réponse, voici une implémentation complète de la solution de contournement dans Groovy:

repositories {
        mavenLocal().apply {
            content {
                excludeGroup("Kotlin/Native")
            }
        }
        maven {
            url = uri("https://dl.bintray.com/soywiz/soywiz")
            content {
                includeGroup("com.soywiz")
                excludeGroup("Kotlin/Native")
            }
        }
        jcenter() {
            content {
                excludeGroup("Kotlin/Native")
            }
        }
        google().apply {
            content {
                excludeGroup("Kotlin/Native")
            }
        }
    }

et dans Kotlin DSL :

repositories {
    mavenCentral().content() {
        excludeGroup "Kotlin/Native"
    }
    google().content() {
        excludeGroup "Kotlin/Native"
    }
    jcenter() {
        content {
            excludeGroup("Kotlin/Native")
        }
    }
    maven { 
        url 'https://jitpack.io'
        content {
            excludeGroup("Kotlin/Native")
        }
    }
}


0 commentaires