Kotlin JVM projects usually separate production and test source sets.

source set A source set groups files by role, such as `main` code or `test` code.

Source Set Layout

sourceSet
SourceSetLayout.kt
Replay: real traced execution (multi-file project)
fun main() {
    val sourceSet = "main"
    val language = "kotlin"
    val root = "src"
    val path = listOf(root, sourceSet, language).joinToString("/")
    val purpose = if (sourceSet == "main") "application" else "verification"

    println("path=$path")
    println("purpose=$purpose")
}
fun main() {
    val sourceSet = "test"
    val language = "kotlin"
    val root = "src"
    val path = listOf(root, sourceSet, language).joinToString("/")
    val purpose = if (sourceSet == "main") "application" else "verification"

    println("path=$path")
    println("purpose=$purpose")
}
  1. sourceSet ← main, language ← kotlin, root ← src, path ← src/main/kotlin

    1fun main() {2    val sourceSet→ main = "main" //@sourceSet="test"3    val language→ kotlin = "kotlin"4    val root→ src = "src"5    val path→ src/main/kotlin = listOf(rootsrc, sourceSetmain, languagekotlin).joinToString("/")6    val purpose→ application = if (sourceSetmain == "main") "application" else "verification"78    println("path=$pathsrc/main/kotlin")9    println("purpose=$purposeapplication")10}
    outputpath=src/main/kotlin
    purpose=application
  1. sourceSet ← test, language ← kotlin, root ← src, path ← src/test/kotlin

    1fun main() {2    val sourceSet→ test = "test"3    val language→ kotlin = "kotlin"4    val root→ src = "src"5    val path→ src/test/kotlin = listOf(rootsrc, sourceSettest, languagekotlin).joinToString("/")6    val purpose→ verification = if (sourceSettest == "main") "application" else "verification"78    println("path=$pathsrc/test/kotlin")9    println("purpose=$purposeverification")10}
    outputpath=src/test/kotlin
    purpose=verification