【问题标题】:issue in including kotlinx-data-time libray in kotlinjs project在 kotlin js 项目中包含 kotlinx-datetime 库的问题
【发布时间】:2020-12-04 11:32:36
【问题描述】:

FAILURE:构建失败并出现异常。

  • 出了什么问题: 无法确定任务 ':packageJson' 的依赖关系。

无法解析配置 ':npm' 的所有依赖项。 无法解析 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0。 要求: 项目 : > 无法在 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0 的以下变体之间进行选择: - jsIr-运行时 - jsLegacy-运行时 它们都符合消费者属性: - 变体“jsIr-runtime”功能 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0: - 无与伦比的属性: - 找到 org.gradle.status 'release' 但不是必需的。 - 找到 org.jetbrains.kotlin.js.compiler 'ir' 但不是必需的。 - 兼容属性: - 需要 org.gradle.usage 'kotlin-runtime' 并找到兼容值 'kotlin-runtime'。 - 需要 org.jetbrains.kotlin.platform.type 'js' 并找到兼容值 'js'。 - 变体“jsLegacy-runtime”功能 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0: - 无与伦比的属性: - 找到 org.gradle.status 'release' 但不是必需的。 - 找到 org.jetbrains.kotlin.js.compiler 'legacy' 但不是必需的。 - 兼容属性: - 需要 org.gradle.usage 'kotlin-runtime' 并找到兼容值 'kotlin-runtime'。 - 需要 org.jetbrains.kotlin.platform.type 'js' 并找到兼容值 'js'。

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 通过https://help.gradle.org获得更多帮助

7 秒后构建失败

将构建扫描发布到scans.gradle.com 需要接受https://gradle.com/terms-of-service 中定义的Gradle 服务条款。您接受这些条款吗? [是的,没有]

【问题讨论】:

    标签: gradle gradle-kotlin-dsl kotlin-js


    【解决方案1】:

    使用 Kotlin 1.3.xx 构建项目时,如果您的某个依赖项(或任何传递依赖项)是使用 Kotlin 1.4+ 构建的,您可能会遇到 Gradle 错误:

    之所以出现此解决问题,是因为 Kotlin 1.4 为 Kotlin/JS 引入了两种不同的编译器后端之间的选择 - Kotlin 1.3.xx 中没有这种选择。

    解决方法:

    为了使用这些库,请在项目的根目录中创建一个名为 workaround_to_use_1_4_libs_in_1_3.gradle.kts 的文件,并添加以下代码:

        val pluginAction: Plugin<*>.() -> Unit = {
        val pluginVersion = try {
            this.javaClass.getMethod("getKotlinPluginVersion").invoke(this) as String
        } catch(e: Exception) { null }
        if (pluginVersion != null && pluginVersion.startsWith("1.3")) {
            val jsCompilerAttr = Attribute.of("org.jetbrains.kotlin.js.compiler", String::class.java)
            project.dependencies.attributesSchema.attribute(jsCompilerAttr) {
                this.disambiguationRules.add(KotlinJsCompilerDisambiguationRule::class.java)
            }
        }
    }
    project.plugins.withId("org.jetbrains.kotlin.multiplatform", pluginAction)
    project.plugins.withId("org.jetbrains.kotlin.js", pluginAction)
    // project.plugins.withId("kotlin2js", pluginAction) // maybe even `kotlin2js`
    private class KotlinJsCompilerDisambiguationRule : AttributeDisambiguationRule<String> {
        override fun execute(details: MultipleCandidatesDetails<String>) {
            details.closestMatch("legacy")
        }
    }
    

    要应用解决方法,请将以下 sn-p 添加到您的 build.gradle 文件中:

    apply(from = "workaround_to_use_1_4_libs_in_1_3.gradle.kts")
    

    我没有找到松弛频道中的某个人指出的解决方案 您跟踪有解决方案的链接

    the sloution link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2013-01-08
      • 2021-09-08
      • 1970-01-01
      • 2023-01-26
      • 2015-01-31
      相关资源
      最近更新 更多