代码之家  ›  专栏  ›  技术社区  ›  innov8

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

  •  1
  • innov8  · 技术社区  · 7 年前

    我已经应用了应用程序插件,并设置了mainClassName,但是我得到的惟一jar(in/build/libs)不包含库,因此不能简单地使用“java filename”运行。事实上,出于某种原因,我还需要给它上一节主课。

    我本以为应用插件会有这样的选择?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ray Hunter    7 年前

    正如@hotkey指出的,您可以使用 https://github.com/johnrengelman/shadow 像这样的插件:

    classpath 'com.github.jengelman.gradle.plugins:shadow:<version>'
    

    替换 <version>

    并应用插件:

    apply plugin: 'com.github.johnrengelman.shadow'
    

    那么你就可以使用 shadowJar 任务。

        2
  •  0
  •   Vadym Tyemirov    6 年前

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

      它会增加 暗影瓶 任务,可以这样调用: 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)
      }