Cómo crear el tarro de grasa con el script gradle kotlin
build.gradle gradle-kotlin-dsl (2)
Como se titula, me gustaría saber cómo modificar los gradle.build.kts
para tener la tarea de crear un jar
único con todas las dependencias (kotlin lib incluido) dentro.
Encontré esta muestra en 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
}
Pero no tengo idea de cómo podría escribir eso en kotlin, aparte de:
task("fatJar") {
}
Aquí hay una versión que no usa un complemento, más como la versión 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)
}
}
Algunos comentaristas señalaron que esto ya no funciona con las versiones más recientes de Gradle. Actualización probada con 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 la diferencia en configurations.runtimeClasspath.get()
y with(tasks.jar.get() as CopySpec)
.
Puedes usar el complemento ShadowJar para construir un frasco gordo:
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
buildscript {
repositories {
mavenCentral()
gradleScriptKotlin()
}
dependencies {
classpath(kotlinModule("gradle-plugin"))
classpath("com.github.jengelman.gradle.plugins:shadow:1.2.3")
}
}
apply {
plugin("kotlin")
plugin("com.github.johnrengelman.shadow")
}
repositories {
mavenCentral()
}
val shadowJar: ShadowJar by tasks
shadowJar.apply {
manifest.attributes.apply {
put("Implementation-Title", "Gradle Jar File Example")
put("Implementation-Version" version)
put("Main-Class", "com.mkyong.DateUtils")
}
baseName = project.name + "-all"
}
Simplemente ejecuta la tarea con ''shadowJar''.
NOTA: Esto supone que está utilizando GSK 0.7.0 (más reciente a partir del 13/02/2017).