无法解析 com.squareup.sqldelight:runtime:1.1.3
Posted
技术标签:
【中文标题】无法解析 com.squareup.sqldelight:runtime:1.1.3【英文标题】:Could not resolve com.squareup.sqldelight:runtime:1.1.3 【发布时间】:2019-10-27 22:38:30 【问题描述】:我尝试将 sqldelight 集成到我的 android/ios 多平台库项目中,但在同步 gradle 时遇到了几个未解决的依赖错误。
错误:无法解析“:SharedCode@debug/compileClasspath”的依赖关系:。
错误:无法解析 ':SharedCode@debug/compileClasspath' 的依赖关系:无法解析 com.squareup.sqldelight:runtime-jvm:1.1.3。
错误:无法解析 ':SharedCode@release/compileClasspath' 的依赖关系:。 错误:无法解析 ':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
我的 SharedCode lib gradle 文件:
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
【问题讨论】:
apply sqldelight plugin at the end of file move this codeapply plugin: 'com.squareup.sqldelight'
at the bottom of the file.
不,问题仍然存在
我也有这个错误。 Gradle 已更新...
【参考方案1】:
我解决了这个问题。 第一:对所有项目应用sqldelight插件:
apply plugin: 'com.squareup.sqldelight'
sqldelight
MyDatabase
packageName = "ru.trendagent.database"
sourceFolders = ["sqldelight"]
在android部分添加:
packagingOptions
...
exclude 'META-INF/*.kotlin_module'
从CommonMain
部分中删除所有sqldelight 的实现
将实现添加到 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 社区版
【讨论】:
【参考方案2】:在我看来,这是由于离线 gradle 或无效缓存而发生的错误,因为此错误并非特定于 com.squareup.sqldelight。要解决此问题,请按照以下步骤操作:
文件 设置 构建、执行、部署 分级 取消勾选离线工作然后尝试使缓存无效并从文件菜单重新启动。希望对您有所帮助!
【讨论】:
@SlyBeaver 你能在这里发布你的“gradle build --scan”报告吗【参考方案3】:改变这个
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”【参考方案4】:
库的自述文件的Gradle 部分表明,需要 gradle 插件。没有像 runtime 这样的 sqldelight 库。它们只有 android-driver、ios-driver 和 sqlite-driver。
【讨论】:
如果我删除所有出现的 sqldelight runtime,问题仍然存在【参考方案5】:以DroidConKotlin app project 为例,我将 gradle 从 5.1.1 升级到 5.3.1,它解决了所有依赖问题。
【讨论】:
您是否在 settings.gradle 中添加了enableFeaturePreview('GRADLE_METADATA')
?按照 sqldelight github 的自述文件中的建议,我现在只导入 ios-driver、android-driver 库并应用 sqldelight 插件。没有运行时、运行时 jvm 或运行时元数据库。【参考方案6】:
您可能正在尝试使用对依赖库甚至应用程序的依赖,而不仅仅是在 commonMain 模块中。只需更改:
commonMain
dependencies
...
implementation "com.squareup.sqldelight:runtime:$sqldelight_version"
到
commonMain
dependencies
...
api "com.squareup.sqldelight:runtime:$sqldelight_version"
也可以在 dependencies 部分进行更改
并对任何其他未正确解决的依赖项执行相同操作
例如,如果您定义了一个实现依赖项提供的接口的类,并且您在依赖库或应用程序上使用或扩展该类(可能是数百万个示例),就会发生这种情况。
如果您遇到这种情况,为了进一步了解,请查看this answer:
【讨论】:
以上是关于无法解析 com.squareup.sqldelight:runtime:1.1.3的主要内容,如果未能解决你的问题,请参考以下文章