无法解析 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 code apply 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-driverios-driversqlite-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的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 无法解析域名

无法解析的外部符号 C++

C++无法解析的外部命令和外部符号

无法解析的外部符号

ACE编程,无法解析外部符号

error LNK2001: 无法解析的外部符号