Kotlin Gradle插件中的协同路由依赖关系
我正在用Kotlin构建一个Gradle插件,这是我使用Ktor和协同程序的一个特性。插件必须作为类路径包含在第三方项目中 当我试图在另一个项目中使用该插件时,问题出现了,我得到:Kotlin Gradle插件中的协同路由依赖关系,kotlin,gradle-kotlin-dsl,Kotlin,Gradle Kotlin Dsl,我正在用Kotlin构建一个Gradle插件,这是我使用Ktor和协同程序的一个特性。插件必须作为类路径包含在第三方项目中 当我试图在另一个项目中使用该插件时,问题出现了,我得到: 由:java.lang.NoClassDefFoundError:kotlin/coroutines/Continuation引起的消费者项目 我试图隔离协同路由依赖项,并将可传递依赖项应用于Ktor,但没有成功 我见过太多不同的解决方案(),比如应用ShadowJar来构建FatJar,但也许我在配置中遗漏了一些东
由:java.lang.NoClassDefFoundError:kotlin/coroutines/Continuation引起的消费者项目
我试图隔离协同路由依赖项,并将可传递依赖项应用于Ktor,但没有成功
我见过太多不同的解决方案(),比如应用ShadowJar来构建FatJar,但也许我在配置中遗漏了一些东西。一旦我应用了Shadow插件,jar大约是62Mb,即使应用minimize
jar的大小也是12MB
插件的基本配置(基于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()
}
完整的示例如下:
更详细的错误
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作为依赖关系