Fat Jar расширяет зависимости с помощью Gradle Kotlin DSL - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь создать толстый флягу, используя следующую информацию в моем файле Gradle на основе Kotlin:

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

Однако в фаст-фуде все зависимости расширены.Я хотел бы, чтобы файлы jar были включены как есть в каталог / lib, но я не могу понять, как этого добиться.

Кто-нибудь может дать какие-либо указания относительно того, как мне этого добиться?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Хорошо, вы используете zipTree в этой map части спецификации, и она ведет себя в соответствии с документацией : она распаковывает файлы, которые не являются каталогом.

Если вы хотите баночки в /lib, замените from на:

from(configurations.runtimeClasspath) {
    into("lib")
}
0 голосов
/ 10 июля 2019

Если кто-то использует плагин kotlin-multiplatform, конфигурация немного отличается.Вот конфигурация задачи fatJar, предполагающая применение JVM со встроенным JS-интерфейсом из модуля JS:

afterEvaluate {
  tasks {
    create("jar", Jar::class).apply {
      dependsOn("jvmMainClasses", "jsJar")
      group = "jar"
      manifest {
        attributes(
          mapOf(
            "Implementation-Title" to rootProject.name,
            "Implementation-Version" to rootProject.version,
            "Timestamp" to System.currentTimeMillis(),
            "Main-Class" to mainClassName
          )
        )
      }
      val dependencies = configurations["jvmRuntimeClasspath"].filter { it.name.endsWith(".jar") } +
                project.tasks["jvmJar"].outputs.files +
                project.tasks["jsJar"].outputs.files
      dependencies.forEach { from(zipTree(it)) }
      into("/lib")
    }
  }
}
...