Зависимость сопрограмм в плагине Kotlin Gradle - PullRequest
0 голосов
/ 31 декабря 2018

Я создаю плагин Gradle с Kotlin, в одной из функций я использую Ktor и Coroutines.Плагин должен быть включен как classpath в проектах третьей части.

Проблема возникает, когда я пытаюсь использовать плагин в другом проекте, я получаю:

Caused by: java.lang.NoClassDefFoundError: kotlin/coroutines/Continuation напотребительский проект.

Я пытался изолировать зависимости Coroutines и применять транзитивные зависимости для Ktor, но безуспешно.

Я видел слишком разные решения (https://github.com/Kotlin/kotlinx.coroutines/issues/430), такие как применение ShadowJar для создания FatJar, номожет быть, я что-то упускаю в конфигурации. После применения Shadow Plugin размер банки составляет около 62 МБ, даже размер банки minimize составляет 12 МБ.

Основной файл conf (на основе примеров Kotlin-DSL) плагина будет:

    plugins {
        `kotlin-dsl`
        `maven-publish`
        kotlin("jvm") version "1.3.10"
        id("com.github.johnrengelman.shadow") version "4.0.3"
    }

    gradlePlugin {
       plugins {
          register("greet-plugin") {
             id = "greet"
             implementationClass = "GreetPlugin"
          }
       }

      dependencies {
         api("io.ktor:ktor-client-okhttp:1.0.1")
      }
    }

    val sourcesJar by tasks.registering(Jar::class) {
       classifier = "sources"
       from(sourceSets.main.get().allSource)
    }

    val shadowJar: ShadowJar by tasks
        shadowJar.apply {
           baseName = "test"
           classifier = ""
           minimize()
    }

Полный пример приведен здесь: https://github.com/cdsap/testPluginCoroutinesProblem

Более подробная ошибка

    java.lang.NoClassDefFoundError: kotlin/coroutines/Continuation
            at io.ktor.client.engine.okhttp.OkHttp.create(OkHttp.kt:8)
            at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:36)
            at io.ktor.client.HttpClientKt.HttpClient$default(HttpClient.kt:33)
            at GreetPlugin.apply(GreetPlugin.kt:26)
            at GreetPlugin.apply(GreetPlugin.kt:12)

Я ожидаю, что плагинбудет правильно строить зависимость сопрограмм в Ktor и не иметь большой jar в качестве зависимости.

...