Cel: Przygotować jak najprostszą konfigurację Gradle do uruchamiania aplikacji w Kotlinie.
Rozwiązanie
Konfiguracja Gradle w Kotlinie
Struktura projektu:
.
├── build.gradle[.kts]
└── src
└── main
└── kotlin
└── dev/galinski/jedendziennie/minimgradle/App.kt
Konfiguracja wymaga:
- włączenia wtyczki
kotlin
(przyjmuje parametr - docelową platformę, tu “jvm”) - włączenia wtyczki
application
(dodaje do Gradle’owych taskówrun
) i skonfigurowania w niej jaka klasa będzie zawierałamain
- ustawienia repozytoriów, z których pobierzemy zależności - przynajmniej biblioteki standardowej Kotlina
kotlin/src/main/kotlin/dev/galinski/jedendziennie/minimgradle/App.kt
package dev.galinski.jedendziennie.minimgradle
fun main() {
println("kotlin build.gradle")
}
kotlin/build.gradle.kts
plugins {
kotlin("jvm") version "1.4.21"
application
}
application {
mainClassName = "dev.galinski.jedendziennie.minimgradle.AppKt"
}
repositories {
mavenCentral()
}
dependencies {
// additional deps (kotlin plugin adds kotlin-stdlib to all source-sets)
}
Konfiguracja Gradle w Groovym
build.gradle
plugins {
id "org.jetbrains.kotlin.jvm" version "1.4.21"
id "application"
}
application {
mainClassName = "dev.galinski.jedendziennie.minimgradle.AppKt"
}
repositories {
mavenCentral()
}
dependencies {
// additional deps (kotlin plugin adds kotlin-stdlib to all source-sets)
}
Uwagi
- wtyczka
kotlin
dodaje automatycznieimplementation("org.jetbrains.kotlin:kotlin-stdlib")
do zależności wszystkich source-setów. - DSL Gradle’a pozwala włączać wtyczki za pomocą dwóch rodzajów składni: (1)
plugins {...}
, (2)apply { plugin(...) }
. Ten pierwszy (bezapply
) jest zalecany przez autorów Kotlina - podobno użycie drugiego może spowodować błędy typuunresolved references
. Więcej w dokumentacji Gradle’owej wtyczki do Kotlina
QA
- Co to jest
sourceSet
?
To pojęcie z Gradle’a. SourceSet służy do grupowania plików źródłowych i zasobów (resources
), które mają wspólne parametry budowania (np. zależności, classpath’y) - np. “main/java”, “main/kotlin”. Więcej w dokumentacji Gradle. - Dlaczego klasa z
main
jest w plikuAppKt.class
, a nie wApp.class
?
Funkcje pakietowe (zdefiniowane poza klasą, jak naszmain
) trafiają w czasie kompilacji do pliku<nazwa>Kt.class
. Więcej w dokumentacji “interoperacyjności” Javy i Kotlina.