gradle - Ktor 和 Kotlin 多平台的胖 jar 问题
问题描述
我有一个针对 Android 和 iOS 的 kotlin 多平台项目,并且最近集成了 ktor,以便共享库可以加载 Web 资源。它在 iOS 上运行,但在 Android 上出现此错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/HttpClientJvmKt
我猜我的构建管道正在创建一个不包含 ktor 需要的所有依赖项的 jar。所以我正在尝试使用 gradle shadow 插件(com.github.jengelman.gradle.plugins:shadow:2.0.4
)制作一个胖罐子。这是我的任务:
task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from kotlin.targets.android.compilations.main.output
def runtimeClasspath = kotlin.targets.android.compilations.main.runtimeDependencyFiles
configurations = [runtimeClasspath]
baseName = 'myproject-android-shadow'
exclude 'META-INF/*'
exclude '*.kotlin_metadata'
}
jar 从 300Kb 跃升至 8.5Mb。
结果是一个新的错误:More than one file was found with OS independent path 'kotlinx/coroutines/CoroutineExceptionHandler.kotlin_metadata'
您会注意到我已尝试从 中排除文件shadowJar
,但它不起作用。
解决方案
虽然可以构建一个胖 jar,但更简单的解决方案是直接在应用程序中包含缺少的依赖项(ktor
和kotlinx
)。然后我不得不exclude 'META-INF ...
在packagingOptions
.
推荐阅读
- python - 我不明白为什么我的循环缺少数字
- javascript - 垂直选项卡单击它们时不显示内容 Wordpress
- reactjs - 下一个 JS 动态路由不适用于导出生产静态构建
- mongodb - 如何监控重/长任务 MongoDB 查询?
- python - Python中的正则表达式删除冒号前的所有大写字符
- python - 优化中的 Django 原始 SQL?
- javascript - 如何通过 Discord.js v12 获取消息链接?
- c# - angular .net 项目通过登录用户信息
- mysql - MySQL 根据分组条件使用 group by 方法后,如果需要,我可以进一步拆分组吗
- reactjs - Material-ui 的 TreeItem 需要通过右键单击聚焦