配置 build.gradle 为简单的 kotlin 项目创建可执行 jar 文件

Configuring build.gradle to create executable jar file for simple kotlin projects

我正在使用简单的文本编辑器在 Kotlin 中编写我的代码,例如:

fun main() {
    var sc = Scanner(System.`in`)
    var a = sc.nextInt()
    var b = sc.nextInt()

    print(a + b) 
}

而且我已经尝试通过

在命令行中进行简单编译和 运行ning 代码
kotlinc hello.kt -include-runtime -d hello.jar

接着是

java -jar hello.jar

但我不知道为什么最近编译即使是最简单的代码也要超过 5 秒,所以我决定使用 Gradle 来编译和 运行ning 我的项目.编译和 运行 通常需要更少的时间,但是当我想输入一些值时,我不能将它用于 运行ning。我已经尝试寻找一些解决方案,但我能找到的最好的方法是向 Gradle 发出一些信号,表明您希望在构建期间提供一些输入,但这意味着每次都针对不同的代码更改构建。所以我想知道我是否可以配置我的 build.gradle 以便它可以给我我可以 运行 的 jar 可执行文件。

这是我的 build.gradle 文件:

buildscript {
    repositories {
        mavenCentral()
        gradlePluginPortal()
       maven { url "https://dl.bintray.com/kotlin/kotlin-eap" }
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4-M1"
    }
}

plugins {
    id 'application'
}

apply plugin: "kotlin"

repositories {
    maven { url "https://dl.bintray.com/kotlin/kotlin-eap" }
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}

group 'sangeet'
version '1.0'


mainClassName = 'MainKt'

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

sourceSets {
  main.java.srcDirs += './'
}

defaultTasks 'run'

run {
  if (project.hasProperty('main')) {
    main(project.main.replace(".kt", "Kt").capitalize())
  }
}

您需要将项目的所有依赖项(例如 kotlin-stdlib)包含在一个 JAR 文件中,以便它可以独立使用。 Gradle Shadow Plugin 用于此。只需将它添加到您的项目中,例如:

plugins {
  id 'com.github.johnrengelman.shadow' version '5.2.0'
}

并且 shadowJar 会生成一个装有您需要的一切的大罐子。