【问题标题】:Fat jar problem with Ktor and Kotlin multiplatformKtor 和 Kotlin 多平台的胖 jar 问题
【发布时间】:2019-08-12 21:39:59
【问题描述】:

我有一个针对 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 中排除文件,但它不起作用。

【问题讨论】:

    标签: gradle ktor kotlin-multiplatform gradle-shadow-plugin


    【解决方案1】:

    虽然可以构建一个胖 jar,但更简单的解决方案是直接在应用程序中包含缺少的依赖项(ktorkotlinx)。然后我不得不在packagingOptions 中添加一堆exclude 'META-INF ... 语句。

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 2019-12-21
      • 2021-03-30
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      相关资源
      最近更新 更多