我有一个简单的应用程序...但是考虑到“ hello world”也可以作为示例。我正在使用Gradle Kotlin dsl进行构建。
我已经应用了应用程序插件,并设置了mainClassName,但是我得到的唯一jar(在/ build / libs中)不包含库,因此不能简单地使用“ java filename”运行。实际上,出于某种原因,我仍然需要为其提供主班。
但我真正的问题是:“用库(脂肪罐)作为人工制品来生产罐子,最简单的方法是什么?”
我以为应用程序插件可以为此提供一个选项?
答案 0 :(得分:1)
@hotkey指出,您可以像这样使用https://github.com/johnrengelman/shadow插件:
在您的礼貌及以下方面:
classpath 'com.github.jengelman.gradle.plugins:shadow:<version>'
将<version>
替换为当前版本。
并应用插件:
apply plugin: 'com.github.johnrengelman.shadow'
然后您就可以使用shadowJar
任务。
答案 1 :(得分:0)
使用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)
}