如何使用gradle kotlin dsl为简单的控制台应用程序生成“ fatjar”

时间:2018-08-19 13:21:49

标签: kotlin gradle-kotlin-dsl

我有一个简单的应用程序...但是考虑到“ hello world”也可以作为示例。我正在使用Gradle Kotlin dsl进行构建。

我已经应用了应用程序插件,并设置了mainClassName,但是我得到的唯一jar(在/ build / libs中)不包含库,因此不能简单地使用“ java filename”运行。实际上,出于某种原因,我仍然需要为其提供主班。

但我真正的问题是:“用库(脂肪罐)作为人工制品来生产罐子,最简单的方法是什么?”

我以为应用程序插件可以为此提供一个选项?

2 个答案:

答案 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有两种选择:

  1. 构建您自己的任务。 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) }
        })
    }
    
  2. 使用shadow plugin

    plugins {
        id("com.github.johnrengelman.shadow") version "4.0.4"
    }
    

    它将添加 shadowJar 任务,可以像这样调用该任务:gradle build shadowJargradle 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)
    }