How to create the fat jar with gradle kotlin script

前端 未结 3 1839
南方客
南方客 2020-12-24 01:31

As titled, I\'d like to know how to modify the gradle.build.kts in order to have a task to create a unique jar with all the dependencies (kotlin li

3条回答
  •  独厮守ぢ
    2020-12-24 01:49

    Here is a version that does not use a plugin, more like the Groovy version.

    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


    Some commenters pointed out that this does not work anymore with newer Gradle versions. Update tested with 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)
        }
    }
    

    Note the difference in configurations.runtimeClasspath.get() and with(tasks.jar.get() as CopySpec).

提交回复
热议问题