如何使用 gradle kotlin dsl 为简单的控制台应用程序生成 'fatjar'
how to produce a 'fatjar' for a simple console application with gradle kotlin dsl
我有一个简单的应用程序...但考虑到即使 "hello world" 也可以作为示例。我正在使用 gradle kotlin dsl 构建。
我已经应用了应用程序插件,并设置了 mainClassName,但是我得到的唯一 jar(在 /build/libs 中)不包含库,所以不能简单地 运行 和 "java filename" .事实上,出于某种原因我还需要给它一个主要的class。
但我真正的问题是,"what is what easiest way to produce the jar with libraries(fat jar) as an artifact?"
我原以为应用程序插件会有一个选项?
正如@hotkey 指出的那样,您可以像这样使用 https://github.com/johnrengelman/shadow 插件:
在您的依赖项和以下内容中:
classpath 'com.github.jengelman.gradle.plugins:shadow:<version>'
用当前版本替换<version>
。
并应用插件:
apply plugin: 'com.github.johnrengelman.shadow'
然后你就可以使用shadowJar
任务了。
使用 Gradle Kotlin DSL 有两种选择:
建立你自己的任务。
Gradle documentation
中给出了一个例子
tasks.register<Jar>("uberJar") {
appendix = "uber"
from(sourceSets.main.get().output)
dependsOn(configurations.runtimeClasspath)
from({
configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) }
})
}
-
plugins {
id("com.github.johnrengelman.shadow") version "4.0.4"
}
它将添加 shadowJar 任务,可以这样调用:gradle build shadowJar
或 gradle build shadowJar -x test
跳过测试
经常需要包含日志记录,可以这样做:
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
tasks.withType<ShadowJar> {
// the name of the file will be comprised of the basename and version, e.g. $baseName-$version.jar
baseName = "shadow"
transform(Log4j2PluginsCacheFileTransformer::class.java)
}
我有一个简单的应用程序...但考虑到即使 "hello world" 也可以作为示例。我正在使用 gradle kotlin dsl 构建。
我已经应用了应用程序插件,并设置了 mainClassName,但是我得到的唯一 jar(在 /build/libs 中)不包含库,所以不能简单地 运行 和 "java filename" .事实上,出于某种原因我还需要给它一个主要的class。
但我真正的问题是,"what is what easiest way to produce the jar with libraries(fat jar) as an artifact?"
我原以为应用程序插件会有一个选项?
正如@hotkey 指出的那样,您可以像这样使用 https://github.com/johnrengelman/shadow 插件:
在您的依赖项和以下内容中:
classpath 'com.github.jengelman.gradle.plugins:shadow:<version>'
用当前版本替换<version>
。
并应用插件:
apply plugin: 'com.github.johnrengelman.shadow'
然后你就可以使用shadowJar
任务了。
使用 Gradle Kotlin DSL 有两种选择:
建立你自己的任务。 Gradle documentation
中给出了一个例子tasks.register<Jar>("uberJar") { appendix = "uber" from(sourceSets.main.get().output) dependsOn(configurations.runtimeClasspath) from({ configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) } }) }
-
plugins { id("com.github.johnrengelman.shadow") version "4.0.4" }
它将添加 shadowJar 任务,可以这样调用:
gradle build shadowJar
或gradle build shadowJar -x test
跳过测试经常需要包含日志记录,可以这样做:
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer tasks.withType<ShadowJar> { // the name of the file will be comprised of the basename and version, e.g. $baseName-$version.jar baseName = "shadow" transform(Log4j2PluginsCacheFileTransformer::class.java) }