Не удалось разрешить com.squareup.sqldelight: время выполнения: 1.1.3 - PullRequest
3 голосов
/ 13 июня 2019

Я пытался интегрировать sqldelight в свой проект библиотеки Multiplatform для Android / iOS, но у меня есть несколько неразрешенных ошибок зависимостей при синхронизации gradle.

ОШИБКА: невозможно разрешить зависимость для ': SharedCode @debug / compileClasspath ': не удалось разрешить com.squareup.sqldelight: время выполнения: 1.1.3.

ОШИБКА: невозможно разрешить зависимость для': SharedCode @ debug / compileClasspath ': не удалось разрешить com.squareup.sqldelight: runtime-jvm: 1.1.3.

ОШИБКА: невозможно разрешить зависимость для ': SharedCode @ release / compileClasspath': не удалось разрешить com.squareup.sqldelight: время выполнения: 1.1.3.ОШИБКА: невозможно разрешить зависимость для ': SharedCode @ release / compileClasspath': невозможно разрешить com.squareup.sqldelight: runtime-jvm: 1.1.3. **

  • Версия Gradle 5.1.1

  • Плагин Gradle 3.4.0

  • sqldelight 1.1.3

enableFeaturePreview('GRADLE_METADATA') присутствует в моих settings.gradle

Мой файл gradle проекта выглядит следующим образом:

buildscript {
    ext {
        kotlin_version = '1.3.31'
        ktor_version = '1.2.1'
        ktor_json_version = '1.2.1'
        kotlinx_coroutines_version = '1.2.1'
        serialization_version = '0.11.0'
        sqldelight_version = '1.1.3'
        dokka_version = '0.9.16'
    }

    repositories {
        google()
        jcenter()
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:$dokka_version"
        classpath "com.squareup.sqldelight:gradle-plugin:$sqldelight_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url "https://kotlin.bintray.com/kotlinx" }
    }
}

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

мой файл gradle SharedCode lib:

apply plugin: 'kotlinx-serialization'
apply plugin: 'com.android.library'
apply plugin: 'org.jetbrains.kotlin.multiplatform'
apply plugin: 'com.squareup.sqldelight'

group = 'com.example.multiplatform'
version = '1.0'

android {
    compileSdkVersion 27
    defaultConfig {
        minSdkVersion 15
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

dependencies {
    // Specify Kotlin/JVM stdlib dependency.
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7'
    implementation "com.squareup.sqldelight:runtime:1.1.3"

    testImplementation 'junit:junit:4.12'
    testImplementation 'org.jetbrains.kotlin:kotlin-test'
    testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'

    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'org.jetbrains.kotlin:kotlin-test'
    androidTestImplementation 'org.jetbrains.kotlin:kotlin-test-junit'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

kotlin {
    targets {
        final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos")  \
                           ? presets.iosArm64 : presets.iosX64

        fromPreset(iOSTarget, 'ios') {
            binaries {
                framework('SharedCode')
            }
        }

        fromPreset(presets.android, 'androidLib')
    }

    sourceSets {
        commonMain {
            dependencies {
                //HTTP
                implementation "io.ktor:ktor-client-json:$ktor_json_version"
                implementation "io.ktor:ktor-client-serialization:$ktor_version"
                //Coroutines
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$kotlinx_coroutines_version"
                //Kotlinx serialization
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
                //sqldelight
                implementation "com.squareup.sqldelight:runtime:$sqldelight_version"
            }
        }

        androidLibMain {
            dependencies {
                //HTTP
                implementation "io.ktor:ktor-client-json-jvm:$ktor_json_version"
                implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
                //Coroutines
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version"
                //Kotlinx serialization
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
                //sqldelight
                implementation "com.squareup.sqldelight:android-driver:$sqldelight_version"
            }
        }

        iosMain {
            dependencies {
                //HTTP
                implementation "io.ktor:ktor-client-ios:$ktor_version"
                implementation "io.ktor:ktor-client-json-native:$ktor_json_version"
                implementation "io.ktor:ktor-client-serialization-native:$ktor_version"
                //Coroutines
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$kotlinx_coroutines_version"
                //kotlinx serialization
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version"
                //sqldelight
                implementation "com.squareup.sqldelight:ios-driver:$sqldelight_version"
            }
        }
    }
}

sqldelight {
    MyApp {
        packageName = 'com.example.multiplatform'
    }
}

configurations {
    compileClasspath
}

task packForXCode(type: Sync) {
    final File frameworkDir = new File(buildDir, "xcode-frameworks")
    final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'
    final def framework = kotlin.targets.ios.binaries.getFramework("SharedCode", mode)

    inputs.property "mode", mode
    dependsOn framework.linkTask

    from { framework.outputFile.parentFile }
    into frameworkDir

    doLast {
        new File(frameworkDir, 'gradlew').with {
            text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
            setExecutable(true)
        }
    }
}
tasks.build.dependsOn packForXCode

Ответы [ 6 ]

2 голосов
/ 27 июня 2019

Это кажется мне ошибкой, возникшей из-за автономного градла или неправильного кэша, так как эта ошибка не относится к com.squareup.sqldelight.Чтобы решить эту проблему, выполните следующие действия:

  • Файл
  • Настройки
  • Построение, выполнение, развертывание
  • Gradle
  • Снимите флажок автономной работы

, а затем попробуйте сделать недействительным кеш и перезапустить из меню файла.Надеюсь, это поможет!

1 голос
/ 28 июня 2019

Я решил эту проблему.Первое: применить плагин sqldelight прямо ко всему проекту:

apply plugin: 'com.squareup.sqldelight'
sqldelight {
    MyDatabase {
        packageName = "ru.trendagent.database"
        sourceFolders = ["sqldelight"]
    }
}

В разделе Android добавить:

packagingOptions {
        ...
        exclude 'META-INF/*.kotlin_module'
    }

удалить все реализации sqldelight из раздела CommonMain Добавить реализацию в раздел AndroidMain:

implementation "com.squareup.sqldelight:android-driver:1.1.3" //DataBase

добавить реализацию в раздел iosMain, если необходимо:

implementation "com.squareup.sqldelight:ios-driver:1.1.3"//DataBase

добавить настройки метаданных в gradle в файл settings.gradle:

enableFeaturePreview("GRADLE_METADATA") // IMPORTANT!

Полностью очистить файлы gradle,сброс обертки gradle и прочее.Не используйте kotlin 1.4.0.Он не поддерживает версию sqldelight 1.1.3. Измените gradle на последнюю версию.Вы можете скачать последнюю версию Gradle вручную и установить ее в IDE.Вам нужен Gradle 5.3.1 или более поздняя версия (5.1.1 не поддерживается)

Если ошибка останется - измените IDE на intellij idea comunity edition

1 голос
/ 13 июня 2019

Изменить это

 classpath "com.squareup.sqldelight:gradle-plugin:$sqldelight_version"

После

 classpath "com.squareup.sqldelight:runtime:$sqldelight_version"

вы передаете неправильные метаданные в sqldelight измените с моим решением это будет работать

0 голосов
/ 27 июня 2019

Вы, вероятно, пытаетесь использовать зависимость от зависимых библиотек или даже приложений, а не только в модуле commonMain. Просто измените:

commonMain {
    dependencies {
        ...
        implementation "com.squareup.sqldelight:runtime:$sqldelight_version"
    }
}

до

commonMain {
    dependencies {
        ...
        api "com.squareup.sqldelight:runtime:$sqldelight_version"
    }
}

Также измените его на зависимости раздел

И сделать то же самое с любой другой зависимостью, некорректно разрешенной

Это может произойти, например, если вы определяете класс, который реализует интерфейс, предоставляемый зависимостью, и вы используете или расширяете этот класс в зависимых библиотеках или приложениях (просто пример миллионов, которые могут быть).

Если это ваш случай, для дальнейшего понимания просто взгляните на этот ответ :

0 голосов
/ 17 июня 2019

Используя в качестве примера проект приложения DroidConKotlin , я обновил gradle с 5.1.1 до 5.3.1, и он решил все проблемы с зависимостями.

0 голосов
/ 13 июня 2019

Часть Gradle файла readme библиотеки указывает, что необходим модуль Gradle.Нет такой библиотеки sqldelight , как runtime .У них есть только android-драйвер , ios-драйвер и sqlite-драйвер .

...