Настройка build.gradle для создания исполняемого файла jar для простых kotlin проектов - PullRequest
0 голосов
/ 27 мая 2020

Я использую простые текстовые редакторы, чтобы написать свой код в 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())
  }
}

1 Ответ

0 голосов
/ 27 мая 2020

Вам нужно будет включить все зависимости ваших проектов (например, kotlin-stdlib) в файл JAR, чтобы его можно было использовать автономно. Плагин Gradle Shadow используется для этого. Просто добавьте его в свой проект, например:

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

, и shadowJar создаст толстую банку со всем, что вам нужно.

...