Step 11 of 13
Project structure, build.gradle.kts, dependencies, multi-module setup, Gradle wrapper
ตั้งค่าโปรเจกต์ Gradle — build.gradle.kts, dependencies, multi-module, และ Gradle wrapper
The fastest way is IntelliJ IDEA:
Or create manually:
mkdir my-kotlin-app && cd my-kotlin-app
gradle init --type kotlin-application
my-kotlin-app/
├── build.gradle.kts # Build configuration
├── settings.gradle.kts # Project name and modules
├── gradle.properties # Gradle + Kotlin version settings
├── src/
│ ├── main/kotlin/ # Source code
│ │ └── Main.kt
│ └── test/kotlin/ # Tests
│ └── MainTest.kt
└── gradle/
└── wrapper/ # Gradle wrapper (don't edit)
plugins {
kotlin("jvm") version "2.4.10"
application
}
group = "com.example"
version = "1.0.0"
repositories {
mavenCentral()
}
dependencies {
// Kotlin standard library (added automatically by the kotlin plugin)
// Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0")
// Testing
testImplementation(kotlin("test"))
}
// Application entry point
application {
mainClass.set("com.example.MainKt")
}
pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
}
}
rootProject.name = "my-kotlin-app"
Use implementation for libraries your code needs at runtime:
dependencies {
// JSON serialization
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
// Date and time
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.2")
// Testing
testImplementation(kotlin("test"))
testImplementation("io.mockk:mockk:1.13.16")
}
| Keyword | Use for |
|---|---|
implementation | Libraries your code uses internally |
api | Libraries exposed in your public API |
testImplementation | Test-only libraries |
compileOnly | Needed at compile time but not runtime |
# Compile the project
./gradlew compileKotlin
# Run tests
./gradlew test
# Build a distributable (JAR or ZIP)
./gradlew installDist
# Run the application
./gradlew run
# Clean build outputs
./gradlew clean
# Build everything from scratch
./gradlew clean build
For larger projects, split into modules. In settings.gradle.kts:
rootProject.name = "my-app"
include("core")
include("api")
include("cli")
Each module has its own build.gradle.kts. Modules can depend on each other:
// api/build.gradle.kts
dependencies {
implementation(project(":core"))
}
Diagram: Multi-module Gradle project with core, api, and cli modules. api and cli both depend on core.
Loading diagram...
The gradlew (Unix) and gradlew.bat (Windows) scripts let you build without installing Gradle. They download the correct version automatically.
Always commit these files:
gradlew
gradlew.bat
gradle/wrapper/gradle-wrapper.properties
gradle/wrapper/gradle-wrapper.jar
To update the Gradle version:
./gradlew wrapper --gradle-version 8.14
Create a project with kotlinx.serialization and a data class:
plugins {
kotlin("jvm") version "2.4.10"
kotlin("plugin.serialization") version "2.4.10"
application
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
}
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class Task(val id: Int, val title: String, val done: Boolean = false)
fun main() {
val task = Task(1, "Learn Gradle")
val json = Json.encodeToString(task)
println(json) // {"id":1,"title":"Learn Gradle","done":false}
val decoded = Json.decodeFromString<Task>(json)
println(decoded) // Task(id=1, title=Learn Gradle, done=false)
}
./gradlew run