gradle - 在 kotlinjs 项目中包含 kotlinx-data-time libray 的问题
问题描述
FAILURE:构建失败并出现异常。
- 出了什么问题:无法确定任务':packageJson'的依赖关系。
无法解析配置“:npm”的所有依赖项。无法解析 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0。要求:项目:> 无法在 org.jetbrains.kotlinx:kotlinx-datetime:0.1.0 的以下变体之间进行选择: - jsIr-runtime - jsLegacy-runtime 所有这些都匹配消费者属性: - 变体 '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 服务条款。您接受这些条款吗?[是的,没有]
解决方案
使用 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")
}
}
要应用解决方法,请将以下代码段添加到您的 build.gradle 文件中:
apply(from = "workaround_to_use_1_4_libs_in_1_3.gradle.kts")
我没有找到解决方案,我在 slack 频道中的某个人指出了它,您跟踪有解决方案的链接
推荐阅读
- scala - 将 Mozilla Rhino 与 SBT 一起使用 - 未知工件
- python - 如何让我的 python 程序运行得更快?
- python - 我对 Keras 模型的输入形状有疑问
- python - 当我尝试使用 setter 时出现错误。错误消息是 AttributeError: 'function' object has no attribute 'setter'
- mysql - 更新节点 js mysql2 中的几个值
- c# - 为什么我的 C# 对象不能在 windows 窗体图形中移动?
- node.js - 使用内部 id 更新 mongo 模型的内部对象
- android - @UiThreadTest 注释在片段的写测试中不起作用
- ruby-on-rails - Devise-OmniAuth Facebook 登录卡在 CORS 问题上
- python - Python用空格替换字符串