Tooling and Project Concepts
Dependency Scope Model
Dependency scope records whether a library is needed by production code, tests, or both.
dependency scope
Scope keeps dependency intent visible so a test helper does not become part of the runtime artifact.
Dependency Scope Model
DependencyScopeModel.kt
Replay: real traced execution (multi-file project)
fun main() {
val scope = "implementation"
val dependency = mapOf(
"group" to "org.example",
"name" to "toolkit",
"version" to "1.2.0"
)
val coordinate = "${dependency["group"]}:${dependency["name"]}:${dependency["version"]}"
val packaged = scope == "implementation" || scope == "runtimeOnly"
println("scope=$scope")
println("coordinate=$coordinate")
println("packaged=$packaged")
}
fun main() {
val scope = "testImplementation"
val dependency = mapOf(
"group" to "org.example",
"name" to "toolkit",
"version" to "1.2.0"
)
val coordinate = "${dependency["group"]}:${dependency["name"]}:${dependency["version"]}"
val packaged = scope == "implementation" || scope == "runtimeOnly"
println("scope=$scope")
println("coordinate=$coordinate")
println("packaged=$packaged")
}
fun main() {
val scope = "runtimeOnly"
val dependency = mapOf(
"group" to "org.example",
"name" to "toolkit",
"version" to "1.2.0"
)
val coordinate = "${dependency["group"]}:${dependency["name"]}:${dependency["version"]}"
val packaged = scope == "implementation" || scope == "runtimeOnly"
println("scope=$scope")
println("coordinate=$coordinate")
println("packaged=$packaged")
}
scope ← implementation, dependency ← {group=org.example, name=toolkit, version=1.2.0}
1fun main() {2 val scope→ implementation = "implementation" //@scope="testImplementation", "runtimeOnly"3 val dependency→ {group=org.example, name=toolkit, version=1.2.0} = mapOf(4 "group" to "org.example",5 "name" to "toolkit",6 "version" to "1.2.0"7 )8 val coordinate→ org.example:toolkit:1.2.0 = "${dependency["group"]org.example}:${dependency["name"]toolkit}:${dependency["version"]1.2.0}"9 val packaged→ true = scopeimplementation == "implementation" || scope == "runtimeOnly"1011 println("scope=$scopeimplementation")12 println("coordinate=$coordinateorg.example:toolkit:1.2.0")13 println("packaged=$packagedtrue")14}outputscope=implementation coordinate=org.example:toolkit:1.2.0 packaged=true
scope ← testImplementation, dependency ← {group=org.example, name=toolkit, version=1.2.0}
1fun main() {2 val scope→ testImplementation = "testImplementation"3 val dependency→ {group=org.example, name=toolkit, version=1.2.0} = mapOf(4 "group" to "org.example",5 "name" to "toolkit",6 "version" to "1.2.0"7 )8 val coordinate→ org.example:toolkit:1.2.0 = "${dependency["group"]org.example}:${dependency["name"]toolkit}:${dependency["version"]1.2.0}"9 val packaged→ false = scopetestImplementation == "implementation" || scope == "runtimeOnly"1011 println("scope=$scopetestImplementation")12 println("coordinate=$coordinateorg.example:toolkit:1.2.0")13 println("packaged=$packagedfalse")14}outputscope=testImplementation coordinate=org.example:toolkit:1.2.0 packaged=false
scope ← runtimeOnly, dependency ← {group=org.example, name=toolkit, version=1.2.0}
1fun main() {2 val scope→ runtimeOnly = "runtimeOnly"3 val dependency→ {group=org.example, name=toolkit, version=1.2.0} = mapOf(4 "group" to "org.example",5 "name" to "toolkit",6 "version" to "1.2.0"7 )8 val coordinate→ org.example:toolkit:1.2.0 = "${dependency["group"]org.example}:${dependency["name"]toolkit}:${dependency["version"]1.2.0}"9 val packaged→ true = scoperuntimeOnly == "implementation" || scope == "runtimeOnly"1011 println("scope=$scoperuntimeOnly")12 println("coordinate=$coordinateorg.example:toolkit:1.2.0")13 println("packaged=$packagedtrue")14}outputscope=runtimeOnly coordinate=org.example:toolkit:1.2.0 packaged=true