dependency-conflict-resolver

작성자: kotlin

Diagnose and resolve Gradle and Spring classpath conflicts, version drift, and binary incompatibilities in Kotlin applications. Use when `NoSuchMethodError`,…

npx skills add https://github.com/kotlin/kotlin-backend-agent-skills --skill dependency-conflict-resolver

Dependency Conflict Resolver

Source mapping: Tier 2 high-value skill derived from Kotlin_Spring_Developer_Pipeline.md (SK-05).

Mission

Find which artifact version actually wins, why it wins, and what the narrowest safe correction is. Treat dependency conflict resolution as a version-authority problem, not a guessing contest.

Read First

  • ./gradlew dependencies or module-scoped dependencies output.
  • ./gradlew dependencyInsight --dependency <artifact> for the failing library family.
  • Root and module build files, version catalogs, imported BOMs, and plugin versions.
  • The exact runtime or compile-time error:
    • NoSuchMethodError
    • ClassNotFoundException
    • NoClassDefFoundError
    • AbstractMethodError
    • duplicate binding warnings

Diagnose In This Order

  1. Identify the failing class or method owner.
  2. Identify which artifact provides that class.
  3. Identify all candidate versions on the graph.
  4. Identify the winning version and why it won:
    • direct dependency
    • BOM or platform
    • version catalog alias
    • transitive dependency
    • conflict resolution rule
  5. Identify the true version authority that should own the family.

Advanced Classpath Traps

  • A compile-time green build and a runtime linkage error usually means binary incompatibility between resolved artifacts, not a missing import.
  • Jackson, Netty, SLF4J, Logback, Kotlin stdlib, and Hibernate families should usually be version-aligned as families, not patched one artifact at a time.
  • Plugin classpath and application classpath are different worlds. A plugin upgrade may not fix a runtime library conflict and vice versa.
  • Test runtime can differ from main runtime. A conflict that appears only in tests may come from test fixtures, mock libraries, or test containers support.
  • enforcedPlatform, strictly, and exclusions can fix a conflict or silently lock the graph into brittle behavior. Use them deliberately.
  • Multiple logging bindings often create confusing startup behavior long before they fail hard.
  • Shading or relocation is rarely the first answer in an ordinary Spring Boot app. Reach for it only when classpath isolation is truly required.

Gradle Resolution Nuances

  • Variant-aware resolution can choose artifacts by attributes such as usage, JVM version, and capabilities. A "present" dependency may still resolve to the wrong variant.
  • BOM import order and multiple platforms can subtly change which family wins even when the declared versions look reasonable.
  • api versus implementation leakage in shared modules can make conflicts appear only in downstream consumers.
  • Duplicate classes from repackaged or relocated jars may not surface until runtime classloading or auto-configuration scans.
  • Annotation processors, KSP, and plugin classpaths may need separate alignment from the main application runtime.

Expert Heuristics

  • If the symptom is runtime-only, inspect the packaged artifact or runtime classpath, not only IDE dependency trees.
  • If a library family is managed by Spring Boot, prefer returning ownership to the BOM over adding more local pins.
  • If the same conflict recurs across modules, solve it at the platform or convention level instead of patching one module at a time.
  • If a dependency looks unused, verify reflective, auto-configured, or service-loader usage before removing it.

Preferred Resolution Strategy

  • Prefer removing an unnecessary explicit version when the BOM already manages a compatible one.
  • Prefer aligning the entire affected dependency family.
  • Prefer a direct, documented version override over hidden exclusions if an override is truly needed.
  • Use exclusions only when a dependency is genuinely wrong for the module, not merely inconvenient.
  • Explain why the chosen layer should own the version so the conflict does not return on the next upgrade.

Output Contract

Return these sections:

  • Conflict summary: what is colliding and where the symptom appears.
  • Winning path: how the resolved artifact version is selected.
  • Version authority: which file or platform should own the fix.
  • Minimal fix: the smallest safe dependency or platform change.
  • Verification: compile-time and runtime checks that confirm the graph is healthy.

Guardrails

  • Do not invent version numbers without tracing the existing compatibility model.
  • Do not spray exclusions until the graph goes green.
  • Do not use force as the default answer.
  • Do not fix only the visibly failing artifact when the whole library family is misaligned.

Quality Bar

A good run of this skill explains the conflict path and resolves it at the right authority layer. A bad run produces a one-off version pin that compiles today and recreates the same conflict in the next branch.

kotlin의 다른 스킬

ci-cd-containerization-advisor
kotlin
재현 가능한 빌드, 이미지 및 배포 파이프라인을 설계합니다. Kotlin 및 Spring 애플리케이션을 대상으로 하며, CI 검증, 계층형 컨테이너, 롤아웃 안전성 등을 포함합니다.
official
configuration-properties-profiles-kotlin-safe
kotlin
Design and diagnose Spring configuration, profiles, and `@ConfigurationProperties` binding for Kotlin applications. Use when property binding fails,…
official
domain-decomposition-api-design-advisor
kotlin
구현을 시작하기 전에 비즈니스 범위를 경계 컨텍스트, 모듈 또는 서비스 경계, 워크플로우, API 계약으로 분해합니다. 새로운 것을 설계할 때 사용하세요.
official
error-model-validation-architect
kotlin
Kotlin과 Spring 서비스를 위한 일관된 API 검증 및 오류 처리 동작을 설계하고 구현합니다. 오류 페이로드를 정의하거나 프레임워크를 매핑할 때 사용합니다.
official
gradle-kotlin-dsl-doctor
kotlin
Generate, debug, and repair Kotlin + Spring Gradle builds with minimal, compatible changes. Use when `build.gradle.kts` or `settings.gradle.kts` is failing,…
official
integration-resilience-engineer
kotlin
탄력적인 HTTP, 메시징, 예약 통합을 Kotlin 및 Spring 서비스용으로 설계하며 명시적인 타임아웃 예산, 재시도, 멱등성, 서킷 브레이커를 포함합니다.
official
jackson-kotlin-serialization-specialist
kotlin
Kotlin과 Jackson을 사용하는 Spring 애플리케이션에서 JSON 직렬화 및 역직렬화 동작을 진단하고 설계합니다. DTO 역직렬화 실패 시, 기본값…
official
java-kotlin-migration-assistant
kotlin
Spring 기반 코드베이스에서 동작, 공개 계약, 프레임워크 호환성, 바이너리 가정을 변경하지 않고 Java 코드를 Kotlin으로 마이그레이션합니다. 단, …
official