Создайте толстую банку из мультиплатформенного проекта ktor Kotlin с Kotlin Gradle DSL - PullRequest
0 голосов
/ 16 апреля 2020

Попытка создать работоспособную флягу для многоплатформенного проекта kotlin, который включает серверный компонент ktor, сборка с Kotlin Gradle DSL.

Я видел несколько вопросов, включая Создание толстой фляги из kotlin мультиплатформенный проект , который спрашивает и отвечает, как создать файл сборки gradle в Groovy, но как вы делаете это в kotlin dsl?

Код groovy, о котором сообщается на работу это:

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

Как бы это перевести на Kotlin DSL? Я перепробовал много вариантов, некоторые из которых компилируются и запускаются, но не создают желаемого результата ... исполняемый файл.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

@ 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) })
        }
    }
}

It работает как положено в здесь с gradle jvmJar && java -jar build/libs/laguna-jvm.jar

0 голосов
/ 17 апреля 2020

Ваш groovy dsl может быть записан в kotlin следующим образом

kotlin {
  jvm {
    withJava()
    val jvmJar by tasks.getting(org.gradle.jvm.tasks.Jar::class) {
        manifest {
            attributes["Main-Class"] = "sample.MainKt"
        }
        from(configurations.getByName("runtimeClasspath").map { if (it.isDirectory) it else zipTree(it) })
    }
  }
}
...