如何用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日)。