Search code examples
gradlegradle-kotlin-dsl

Fat Jar expands dependencies with Gradle Kotlin DSL


I am trying to build a fat jar using the following in my Kotlin based gradle file.

val fatJar = task("fatJar", type = Jar::class) {
  baseName = "safescape-lib-${project.name}"
  // manifest Main-Class attribute is optional.
  // (Used only to provide default main class for executable jar)
  from(configurations.runtimeClasspath.map({ if (it.isDirectory) it else zipTree(it) }))
  with(tasks["jar"] as CopySpec)
}

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

However, the fat jar has all the dependencies expanded out. I would like to have the jars included as is in a /lib directory but I cannot work out how to achieve this.

Can anyone give any pointers as to how I can achieve this?

Thanks


Solution

  • Well you are using zipTree in that map part of the spec, and it behaves according to the documentation: it unzips the files that are not a directory.

    If you want the jars in /lib, replace your from with:

    from(configurations.runtimeClasspath) {
        into("lib")
    }