我有一个Kotlin Gradle项目,我想将Kotlin的运行时和stdlib包含在jar文件中。我目前正在使用它,但是当我使用build.gradle配置构建项目时,它不包括运行时或stdlib。
compileKotlin {
kotlinOptions {
includeRuntime = true
noStdlib = false
}
}
这是我用来在jar中包含runtime / stdlib的Gradle代码,但它并没有像我期望的那样工作。这里是某些上下文的完整build.gradle文件: https://github.com/BenWoodworth/CrossPlatformGreeter/blob/bd1da79f36e70e3d88ed871bc35502ecc3a852fb/build.gradle#L35-L43
Kotlin的Gradle文档似乎表明将kotlinOptions.includeRuntime设置为true应该在生成的.jar中包含Kotlin运行时。
https://kotlinlang.org/docs/reference/using-gradle.html#attributes-specific-for-kotlin
修改 这可能是相关的。当我运行compileKotlin时,我收到了一些与运行时相关的警告:
:compileKotlin
w: Classpath entry points to a non-existent location: <no_path>\lib\kotlin-runtime.jar
BUILD SUCCESSFUL
答案 0 :(得分:1)
这是我提出的另一种选择。它将使用jar任务将Kotlin运行时和stdlib添加到jar中。
jar {
from {
String[] include = [
"kotlin-runtime-${version_kotlin}.jar",
"kotlin-stdlib-${version_kotlin}.jar"
]
configurations.compile
.findAll { include.contains(it.name) }
.collect { it.isDirectory() ? it : zipTree(it) }
}
}
答案 1 :(得分:1)
Gradle Kotlin DSL:
tasks.withType<Jar> {
val include = setOf("kotlin-stdlib-1.4.0.jar")
configurations.runtimeClasspath.get()
.filter { it.name in include }
.map { zipTree(it) }
.also { from(it) }
}