Я попытался интегрировать sqldelight в свой проект многоплатформенной библиотеки для Android/iOS, но у меня есть несколько неразрешенных ошибок зависимостей при синхронизации gradle.
ERROR: Unable to resolve dependency for ':SharedCode@debug/compileClasspath': Could not resolve com.squareup.sqldelight:runtime:1.1.3.
ERROR: Unable to resolve dependency for ':SharedCode@debug/compileClasspath': Could not resolve com.squareup.sqldelight:runtime-jvm:1.1.3.
ERROR: Unable to resolve dependency for ':SharedCode@release/compileClasspath': Could not resolve com.squareup.sqldelight:runtime:1.1.3. ERROR: Unable to resolve dependency for ':SharedCode@release/compileClasspath': Could not resolve com.squareup.sqldelight:runtime-jvm:1.1.3.**
Грейдл версии 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
нет, проблема осталась
У меня тоже эта ошибка. Грейдл обновлен...
Изменить это
classpath "com.squareup.sqldelight:gradle-plugin:$sqldelight_version"
Следующий
classpath "com.squareup.sqldelight:runtime:$sqldelight_version"
вы передаете неправильные метаданные для sqldelight изменения с моим решением, это сработает
Заменив строку, у меня новая ошибка Plugin with id 'com.squareup.sqldelight' not found. А с двумя classpath проблема остается
вы добавляете это в неправильный файл gradle, вы должны добавить это в файл gradle папки вашего приложения с реализацией «com.squareup.sqldelight: runtime: $ sqldelight_version»
Часть Грейдл в файле readme библиотеки указывает, что необходим плагин Gradle. Нет такой библиотеки sqldelight, как время выполнения. У них есть только Android-драйвер, ios-драйвер и sqlite-драйвер.
Если я удалю все вхождения среда выполнения sqldelight, проблема все еще здесь.
Используя Проект приложения DroidConKotlin в качестве примера, я обновил gradle с 5.1.1 до 5.3.1, и это решило все проблемы с зависимостями.
Вы добавили enableFeaturePreview('GRADLE_METADATA') в свой settings.gradle? Как указано в файле readme github sqldelight, теперь я импортирую только драйвер ios, библиотеки драйверов android и применяю плагин sqldelight. Нет библиотеки времени выполнения, времени выполнения jvm или времени выполнения метаданных.
Вероятно, вы пытаетесь использовать зависимость от зависимых библиотек или даже приложений, а не только в модуле commonMain. Просто измените:
commonMain {
dependencies {
...
implementation "com.squareup.sqldelight:runtime:$sqldelight_version"
}
}
к
commonMain {
dependencies {
...
api "com.squareup.sqldelight:runtime:$sqldelight_version"
}
}
Также измените его в разделе зависимости.
И сделайте то же самое с любой другой неправильно разрешенной зависимостью
Это может произойти, например, если вы определяете класс, который реализует интерфейс, предоставляемый зависимостью, и вы используете или расширяете этот класс в зависимых библиотеках или приложениях (просто пример из миллионов, которые могут быть).
Если это ваш случай, для дальнейшего понимания просто взгляните на этот ответ:
Мне кажется, что ошибка произошла из-за автономного градиента или недопустимого кеша, поскольку эта ошибка не относится к com.squareup.sqldelight. Чтобы решить эту проблему, выполните следующие действия:
а затем попробуйте сделать кеш недействительным и перезапустить из меню файлов. Надеюсь, поможет!
@SlyBeaver Можете ли вы опубликовать здесь свой отчет «gradle build --scan»?
Я решил эту проблему. Во-первых: примените плагин sqldelight ко всему проекту:
apply plugin: 'com.squareup.sqldelight'
sqldelight {
MyDatabase {
packageName = "ru.trendagent.database"
sourceFolders = ["sqldelight"]
}
}
В разделе андроид добавить:
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
добавьте настройки метаданных для градиента в файл settings.gradle:
enableFeaturePreview("GRADLE_METADATA") // IMPORTANT!
Полностью очистить файлы Gradle, сбросить оболочку Gradle и другие. Не используйте котлин 1.4.0. Он не поддерживает версию sqldelight 1.1.3. Измените Gradle на последнюю версию. Вы можете загрузить последнюю версию Gradle вручную и установить ее в IDE. Вам нужен Gradle 5.3.1 или новее (5.1.1 не поддерживается)
Если ошибка останется - смените IDE на intellij idea comunity edition.
примените плагин sqldelight в конце файла, переместите этот код
apply plugin: 'com.squareup.sqldelight'в конец файла.