kotlin - 如何使用 Gradle Kotlin 脚本创建胖 JAR?

如标题所示,我想知道如何修改 gradle.build.kts 以便执行创建具有所有依赖项的唯一 jar 的任务(包括 kotlin 库)在里面。

我在 Groovy 中找到了这个示例:

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
            'Implementation-Version': version,
            'Main-Class': 'com.mkyong.DateUtils'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

但我不知道如何在 kotlin 中编写它,除了:

task("fatJar") {

}

最佳答案

这里是一个不使用插件的版本,更像是 Groovy 版本。

import org.gradle.jvm.tasks.Jar

val fatJar = task("fatJar", type = Jar::class) {
    baseName = "${project.name}-fat"
    manifest {
        attributes["Implementation-Title"] = "Gradle Jar File Example"
        attributes["Implementation-Version"] = version
        attributes["Main-Class"] = "com.mkyong.DateUtils"
    }
    from(configurations.runtime.map({ if (it.isDirectory) it else zipTree(it) }))
    with(tasks["jar"] as CopySpec)
}

tasks {
    "build" {
        dependsOn(fatJar)
    }
}

Also explained here


一些评论者指出,这不再适用于较新的 Gradle 版本。 使用 Gradle 5.4.1 测试的更新:

import org.gradle.jvm.tasks.Jar

val fatJar = task("fatJar", type = Jar::class) {
    baseName = "${project.name}-fat"
    manifest {
        attributes["Implementation-Title"] = "Gradle Jar File Example"
        attributes["Implementation-Version"] = version
        attributes["Main-Class"] = "com.mkyong.DateUtils"
    }
    from(configurations.runtimeClasspath.get().map({ if (it.isDirectory) it else zipTree(it) }))
    with(tasks.jar.get() as CopySpec)
}

tasks {
    "build" {
        dependsOn(fatJar)
    }
}

注意 configurations.runtimeClasspath.get()with(tasks.jar.get() as CopySpec) 的区别。

https://stackoverflow.com/questions/41794914/

相关文章:

hibernate - 如何使用 JpaRepository 进行批量(多行)插入?

java - 安卓3.3.0更新,错误: Cause: invalid type code: 68

java - getActionView 已弃用?

java - 为什么可以在 Kotlin 的类之外编写函数?

android - Kotlin Android 打印到控制台

java - 在 Kotlin 中使用 Room 的 @ForeignKey 作为 @Entity

android - Kotlin - 如何在 "lateinit"和 "nullable varia

kotlin - 我可以省略在 Kotlin 中不使用的接口(interface)方法吗?

android - 抑制 "Identifier not allowed in Android"

properties - 将静态变量从 Java 转换为 Kotlin