如何用gradle kotlin脚本创建fat jar

作为标题,我想知道如何修改gradle.build.kts为了有一个任务来创建一个具有所有依赖项(包括kotlin lib)的独特jar

我在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 } 

但我不知道我怎么可以写在科特林,除了:

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

还在这里解释

你可以使用ShadowJar插件来构建一个胖的jar:

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

只需使用“shadowJar”运行任务即可。

注意:这假定您使用GSK 0.7.0 (最新截至2017年2月13日)。