2

这个问题是这个线程的延续: https ://github.com/Kotlin/kotlinx.coroutines/issues/246#issuecomment-407023156

我正在尝试org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1在针对 iOS 的 Kotlin/Native 项目中使用。

build.gradle

buildscript {
    repositories {
        mavenCentral()
        maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" }
    }

    dependencies {
        classpath 'org.jetbrains.kotlin:kotlin-native-gradle-plugin:0.8'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51"
    }
}

apply plugin: 'kotlin-platform-native'

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

sourceSets {
    main {
        component {
            target 'ios_arm32', 'ios_arm64', 'ios_x64'
            outputKinds = [KLIBRARY]
        }
    }
}

dependencies {
    expectedBy project(':common')
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1"
}

kotlinx:kotlinx-coroutines-core-native依赖项似乎不起作用,因为会产生如下构建错误:

error: unresolved reference: coroutines
import kotlinx.coroutines.experimental.*
               ^

如果我手动包含工件依赖项,例如org.jetbrains.kotlinx:kotlinx-coroutines-core-native_release_ios_x64:0.10.3-native,那么我会得到一个编译器异常:

exception: java.lang.IllegalStateException: Could not find "atomicfu-native"

即使我还添加了org.jetbrains.kotlinx:atomicfu-native:0.10.3-native依赖项,此错误仍然存​​在。

4

1 回答 1

1

这是要检查的事项列表(我已经通过了这个,并最终使它工作):

  • 启用 Gradle 元数据。需要检索协程依赖项。为此,在您的“settings.gradle”文件中添加这一行,在所有“包含”说明之后:

    enableFeaturePreview('GRADLE_METADATA')
    
  • 使用 gradle 4.7(较新的版本与当前协程库的元数据不兼容,它们需要 0.4 版本的东西,而当前发布的使用 0.3)

  • 在 iOS 模块中:

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1"
    
  • 在您的公共模块中:

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.23.4"
    
  • 如果你有一个 js 模块,它可能会因为 gradle 元数据特性而失败。您可以通过在每个“存储库”块之前添加它来修复它(https://github.com/srs/gradle-node-plugin/issues/301

    repositories.whenObjectAdded {
        if (it instanceof IvyArtifactRepository) {
            metadataSources {
                artifact()
            }
        }
    }
    

希望这就足够了!

于 2018-07-24T09:30:34.243 回答