使用 Kotlin Gradle DSL 从 ktor Kotlin 多平台项目创建 fat jar

cfn*_*fnz 5 ktor gradle-kotlin-dsl kotlin-multiplatform

尝试为 kotlin 多平台项目创建一个可运行的 jar,其中包含一个 ktor 服务器组件,使用 Kotlin Gradle DSL 构建。

我看到了几个问题,包括Create fat jar from kotlin multiplatform project ,它询问并回答如何在 Groovy 中创建 gradle 构建文件,但是如何在 kotlin dsl 中做到这一点?

据报告可以正常工作的常规代码是:

kotlin {
jvm() {
    withJava()
    jvmJar {
        manifest {
            attributes 'Main-Class': 'sample.MainKt'
        }
        from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    }
}
...
}
Run Code Online (Sandbox Code Playgroud)

这将如何转换为 Kotlin DSL?我尝试了很多变体,其中一些可以编译并运行,但没有创建所需的输出...可运行的 jar。

Jav*_*iaz 1

@andylamax 的答案非常接近,但导致了 @cfnz 看到的错误

要解决此问题,您需要添加doFirst如下示例所示:

val jvm = jvm() {
    withJava()
    val jvmJar by tasks.getting(org.gradle.jvm.tasks.Jar::class) {
        doFirst {
            manifest {
                attributes["Main-Class"] = project.ext["mainClass"]
            }
            from(configurations.getByName("runtimeClasspath").map { if (it.isDirectory) it else zipTree(it) })
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它在这里按预期工作gradle jvmJar && java -jar build/libs/laguna-jvm.jar


归档时间:

查看次数:

3018 次

最近记录:

3 年,5 月 前