【问题标题】:Configuring build.gradle to create executable jar file for simple kotlin projects配置 build.gradle 为简单的 kotlin 项目创建可执行 jar 文件
【发布时间】:2020-09-14 05:52:57
【问题描述】:

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

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

    print(a + b) 
}

我已经尝试通过

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

紧随其后

java -jar hello.jar

但我不知道为什么最近编译最简单的代码也需要超过 5 秒的时间,所以我决定使用 Gradle 来编译和运行我的项目。编译和运行通常需要更少的时间,但是当我想输入一些值时,我无法使用它来运行。我已经尝试寻找一些解决方案,但我能找到的最好的方法是向 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 gradle build compilation executable-jar


【解决方案1】:

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

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

shadowJar 会生成一个装有你需要的所有东西的胖罐子。

【讨论】:

  • 好的,谢谢。这就是我一直在寻找的。非常感谢
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
相关资源
最近更新 更多