티스토리 뷰

Server

[Gradle] 그레이들 의존성 분석을 통해 NoClassDefFoundError, NoSuchFieldError 오류 해결하기

망나니개발자 2025. 7. 8. 10:00
반응형



 

1. Gradle 의존성 분석을 통해 NoClassDefFoundError, NoSuchFieldError 오류 트러블슈팅 & 해결하기


[ Gradle의 의존성 분석을 위한 Task들 ]

Gradle의 dependencies Task

Gradle은 의존성 분석을 위한 다양한 Taks들을 제공하는데, 크게 2가지를 활용하게 된다.

  • dependencies
    • 모든 의존성과 그 트리 구조를 출력하는 Task
    • 전체적인 의존성을 파악하고, 특정 의존성이 '왜 추가되었는지' 확인하는 데 용이함
  • dependencyInsight
    • 특정 의존성에 대한 상세 정보를 출력하는 Task
    • 특정 의존성에 대해 '왜 이 버전이 결정되었는지' 확인하는 데 용이함

 

먼저 dependencies Task를 실행해보자. 다음과 같은 명령어로 실행할 수 있다.

./gradlew dependencies

 

 

위의 명령어를 실행하면, 다음과 같이 프로젝트의 모든 의존성과 그 트리 구조가 출력된다. 따라서 어떤 의존성이 추가되었는지, 그리고 어디에서 유래되었는지를 확인하기에 용이한 것이다. 다음의 더보기를 누르면 전체 트리 구조를 확인할 수 있다.

더보기
annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok -> 1.18.36

bootArchives - Configuration for Spring Boot archive artifacts. (n)
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- org.projectlombok:lombok -> 1.18.36
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    \--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
\--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
     +--- io.micrometer:micrometer-core:1.14.5 (*)
     +--- io.prometheus:prometheus-metrics-core:1.3.6
     |    +--- io.prometheus:prometheus-metrics-model:1.3.6
     |    \--- io.prometheus:prometheus-metrics-config:1.3.6
     \--- io.prometheus:prometheus-metrics-tracer-common:1.3.6

compileOnly - Compile-only dependencies for the 'main' feature. (n)
\--- org.projectlombok:lombok (n)

default - Configuration for default artifacts. (n)
No dependencies

developmentOnly - Configuration for development-only dependencies such as Spring Boot's DevTools.
No dependencies

implementation - Implementation dependencies for the 'main' feature. (n)
+--- org.springframework.boot:spring-boot-starter-data-jpa (n)
+--- org.springframework.boot:spring-boot-starter-validation (n)
+--- org.springframework.boot:spring-boot-starter-web (n)
+--- org.springframework.boot:spring-boot-starter-actuator (n)
\--- io.micrometer:micrometer-registry-prometheus (n)

mainSourceElements - List of source directories contained in the Main SourceSet. (n)
No dependencies

productionRuntimeClasspath
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    +--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    |    +--- org.jboss.logging:jboss-logging:3.5.0.Final -> 3.6.1.Final
|    |    +--- org.hibernate.common:hibernate-commons-annotations:7.0.3.Final
|    |    +--- io.smallrye:jandex:3.2.0
|    |    +--- com.fasterxml:classmate:1.5.1 -> 1.7.0
|    |    +--- net.bytebuddy:byte-buddy:1.15.11
|    |    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 -> 4.0.2
|    |    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    +--- org.glassfish.jaxb:jaxb-runtime:4.0.2 -> 4.0.5
|    |    |    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    |    |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.eclipse.angus:angus-activation:2.0.2
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.glassfish.jaxb:txw2:4.0.5
|    |    |         \--- com.sun.istack:istack-commons-runtime:4.1.2
|    |    +--- jakarta.inject:jakarta.inject-api:2.0.1
|    |    \--- org.antlr:antlr4-runtime:4.13.0
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (*)
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|         |    +--- org.hdrhistogram:HdrHistogram:2.2.2
|         |    \--- org.latencyutils:LatencyUtils:2.0.3
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
+--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
|    +--- io.micrometer:micrometer-core:1.14.5 (*)
|    +--- io.prometheus:prometheus-metrics-core:1.3.6
|    |    +--- io.prometheus:prometheus-metrics-model:1.3.6
|    |    \--- io.prometheus:prometheus-metrics-config:1.3.6
|    +--- io.prometheus:prometheus-metrics-tracer-common:1.3.6
|    \--- io.prometheus:prometheus-metrics-exposition-formats:1.3.6
|         \--- io.prometheus:prometheus-metrics-exposition-textformats:1.3.6
|              +--- io.prometheus:prometheus-metrics-model:1.3.6
|              \--- io.prometheus:prometheus-metrics-config:1.3.6
\--- com.h2database:h2 -> 2.3.232

runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    +--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    |    +--- org.jboss.logging:jboss-logging:3.5.0.Final -> 3.6.1.Final
|    |    +--- org.hibernate.common:hibernate-commons-annotations:7.0.3.Final
|    |    +--- io.smallrye:jandex:3.2.0
|    |    +--- com.fasterxml:classmate:1.5.1 -> 1.7.0
|    |    +--- net.bytebuddy:byte-buddy:1.15.11
|    |    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 -> 4.0.2
|    |    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    +--- org.glassfish.jaxb:jaxb-runtime:4.0.2 -> 4.0.5
|    |    |    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    |    |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.eclipse.angus:angus-activation:2.0.2
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.glassfish.jaxb:txw2:4.0.5
|    |    |         \--- com.sun.istack:istack-commons-runtime:4.1.2
|    |    +--- jakarta.inject:jakarta.inject-api:2.0.1
|    |    \--- org.antlr:antlr4-runtime:4.13.0
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (*)
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|         |    +--- org.hdrhistogram:HdrHistogram:2.2.2
|         |    \--- org.latencyutils:LatencyUtils:2.0.3
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
+--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
|    +--- io.micrometer:micrometer-core:1.14.5 (*)
|    +--- io.prometheus:prometheus-metrics-core:1.3.6
|    |    +--- io.prometheus:prometheus-metrics-model:1.3.6
|    |    \--- io.prometheus:prometheus-metrics-config:1.3.6
|    +--- io.prometheus:prometheus-metrics-tracer-common:1.3.6
|    \--- io.prometheus:prometheus-metrics-exposition-formats:1.3.6
|         \--- io.prometheus:prometheus-metrics-exposition-textformats:1.3.6
|              +--- io.prometheus:prometheus-metrics-model:1.3.6
|              \--- io.prometheus:prometheus-metrics-config:1.3.6
\--- com.h2database:h2 -> 2.3.232

runtimeElements - Runtime elements for the 'main' feature. (n)
No dependencies

runtimeOnly - Runtime-only dependencies for the 'main' feature. (n)
\--- com.h2database:h2 (n)

testAndDevelopmentOnly - Configuration for test and development-only dependencies such as Spring Boot's DevTools.
No dependencies

testAnnotationProcessor - Annotation processors and their dependencies for source set 'test'.
No dependencies

testCompileClasspath - Compile classpath for source set 'test'.
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    \--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
+--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
|    +--- io.micrometer:micrometer-core:1.14.5 (*)
|    +--- io.prometheus:prometheus-metrics-core:1.3.6
|    |    +--- io.prometheus:prometheus-metrics-model:1.3.6
|    |    \--- io.prometheus:prometheus-metrics-config:1.3.6
|    \--- io.prometheus:prometheus-metrics-tracer-common:1.3.6
\--- org.springframework.boot:spring-boot-starter-test -> 3.4.4
     +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
     +--- org.springframework.boot:spring-boot-test:3.4.4
     |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
     |    \--- org.springframework:spring-test:6.2.5
     |         \--- org.springframework:spring-core:6.2.5 (*)
     +--- org.springframework.boot:spring-boot-test-autoconfigure:3.4.4
     |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
     |    +--- org.springframework.boot:spring-boot-test:3.4.4 (*)
     |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
     +--- com.jayway.jsonpath:json-path:2.9.0
     +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2
     |    \--- jakarta.activation:jakarta.activation-api:2.1.3
     +--- net.minidev:json-smart:2.5.2
     |    \--- net.minidev:accessors-smart:2.5.2
     |         \--- org.ow2.asm:asm:9.7.1
     +--- org.assertj:assertj-core:3.26.3
     |    \--- net.bytebuddy:byte-buddy:1.14.18 -> 1.15.11
     +--- org.awaitility:awaitility:4.2.2
     |    \--- org.hamcrest:hamcrest:2.1 -> 2.2
     +--- org.hamcrest:hamcrest:2.2
     +--- org.junit.jupiter:junit-jupiter:5.11.4
     |    +--- org.junit:junit-bom:5.11.4
     |    |    +--- org.junit.jupiter:junit-jupiter:5.11.4 (c)
     |    |    +--- org.junit.jupiter:junit-jupiter-api:5.11.4 (c)
     |    |    +--- org.junit.jupiter:junit-jupiter-params:5.11.4 (c)
     |    |    \--- org.junit.platform:junit-platform-commons:1.11.4 (c)
     |    +--- org.junit.jupiter:junit-jupiter-api:5.11.4
     |    |    +--- org.junit:junit-bom:5.11.4 (*)
     |    |    +--- org.opentest4j:opentest4j:1.3.0
     |    |    +--- org.junit.platform:junit-platform-commons:1.11.4
     |    |    |    +--- org.junit:junit-bom:5.11.4 (*)
     |    |    |    \--- org.apiguardian:apiguardian-api:1.1.2
     |    |    \--- org.apiguardian:apiguardian-api:1.1.2
     |    \--- org.junit.jupiter:junit-jupiter-params:5.11.4
     |         +--- org.junit:junit-bom:5.11.4 (*)
     |         +--- org.junit.jupiter:junit-jupiter-api:5.11.4 (*)
     |         \--- org.apiguardian:apiguardian-api:1.1.2
     +--- org.mockito:mockito-core:5.14.2
     |    +--- net.bytebuddy:byte-buddy:1.15.4 -> 1.15.11
     |    \--- net.bytebuddy:byte-buddy-agent:1.15.4 -> 1.15.11
     +--- org.mockito:mockito-junit-jupiter:5.14.2
     |    \--- org.mockito:mockito-core:5.14.2 (*)
     +--- org.skyscreamer:jsonassert:1.5.3
     |    \--- com.vaadin.external.google:android-json:0.0.20131108.vaadin1
     +--- org.springframework:spring-core:6.2.5 (*)
     +--- org.springframework:spring-test:6.2.5 (*)
     \--- org.xmlunit:xmlunit-core:2.10.0

testCompileOnly - Compile only dependencies for source set 'test'. (n)
No dependencies

testImplementation - Implementation only dependencies for source set 'test'. (n)
\--- org.springframework.boot:spring-boot-starter-test (n)

testRuntimeClasspath - Runtime classpath of source set 'test'.
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    +--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    |    +--- org.jboss.logging:jboss-logging:3.5.0.Final -> 3.6.1.Final
|    |    +--- org.hibernate.common:hibernate-commons-annotations:7.0.3.Final
|    |    +--- io.smallrye:jandex:3.2.0
|    |    +--- com.fasterxml:classmate:1.5.1 -> 1.7.0
|    |    +--- net.bytebuddy:byte-buddy:1.15.11
|    |    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 -> 4.0.2
|    |    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    +--- org.glassfish.jaxb:jaxb-runtime:4.0.2 -> 4.0.5
|    |    |    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    |    |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.eclipse.angus:angus-activation:2.0.2
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.glassfish.jaxb:txw2:4.0.5
|    |    |         \--- com.sun.istack:istack-commons-runtime:4.1.2
|    |    +--- jakarta.inject:jakarta.inject-api:2.0.1
|    |    \--- org.antlr:antlr4-runtime:4.13.0
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (*)
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|         |    +--- org.hdrhistogram:HdrHistogram:2.2.2
|         |    \--- org.latencyutils:LatencyUtils:2.0.3
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
+--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
|    +--- io.micrometer:micrometer-core:1.14.5 (*)
|    +--- io.prometheus:prometheus-metrics-core:1.3.6
|    |    +--- io.prometheus:prometheus-metrics-model:1.3.6
|    |    \--- io.prometheus:prometheus-metrics-config:1.3.6
|    +--- io.prometheus:prometheus-metrics-tracer-common:1.3.6
|    \--- io.prometheus:prometheus-metrics-exposition-formats:1.3.6
|         \--- io.prometheus:prometheus-metrics-exposition-textformats:1.3.6
|              +--- io.prometheus:prometheus-metrics-model:1.3.6
|              \--- io.prometheus:prometheus-metrics-config:1.3.6
+--- com.h2database:h2 -> 2.3.232
+--- org.springframework.boot:spring-boot-starter-test -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-test:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework:spring-test:6.2.5
|    |         \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.springframework.boot:spring-boot-test-autoconfigure:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-test:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- com.jayway.jsonpath:json-path:2.9.0
|    |    +--- net.minidev:json-smart:2.5.0 -> 2.5.2
|    |    |    \--- net.minidev:accessors-smart:2.5.2
|    |    |         \--- org.ow2.asm:asm:9.7.1
|    |    \--- org.slf4j:slf4j-api:2.0.11 -> 2.0.17
|    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    +--- net.minidev:json-smart:2.5.2 (*)
|    +--- org.assertj:assertj-core:3.26.3
|    |    \--- net.bytebuddy:byte-buddy:1.14.18 -> 1.15.11
|    +--- org.awaitility:awaitility:4.2.2
|    |    \--- org.hamcrest:hamcrest:2.1 -> 2.2
|    +--- org.hamcrest:hamcrest:2.2
|    +--- org.junit.jupiter:junit-jupiter:5.11.4
|    |    +--- org.junit:junit-bom:5.11.4
|    |    |    +--- org.junit.jupiter:junit-jupiter:5.11.4 (c)
|    |    |    +--- org.junit.jupiter:junit-jupiter-api:5.11.4 (c)
|    |    |    +--- org.junit.jupiter:junit-jupiter-engine:5.11.4 (c)
|    |    |    +--- org.junit.jupiter:junit-jupiter-params:5.11.4 (c)
|    |    |    +--- org.junit.platform:junit-platform-engine:1.11.4 (c)
|    |    |    +--- org.junit.platform:junit-platform-launcher:1.11.4 (c)
|    |    |    \--- org.junit.platform:junit-platform-commons:1.11.4 (c)
|    |    +--- org.junit.jupiter:junit-jupiter-api:5.11.4
|    |    |    +--- org.junit:junit-bom:5.11.4 (*)
|    |    |    +--- org.opentest4j:opentest4j:1.3.0
|    |    |    \--- org.junit.platform:junit-platform-commons:1.11.4
|    |    |         \--- org.junit:junit-bom:5.11.4 (*)
|    |    +--- org.junit.jupiter:junit-jupiter-params:5.11.4
|    |    |    +--- org.junit:junit-bom:5.11.4 (*)
|    |    |    \--- org.junit.jupiter:junit-jupiter-api:5.11.4 (*)
|    |    \--- org.junit.jupiter:junit-jupiter-engine:5.11.4
|    |         +--- org.junit:junit-bom:5.11.4 (*)
|    |         +--- org.junit.platform:junit-platform-engine:1.11.4
|    |         |    +--- org.junit:junit-bom:5.11.4 (*)
|    |         |    +--- org.opentest4j:opentest4j:1.3.0
|    |         |    \--- org.junit.platform:junit-platform-commons:1.11.4 (*)
|    |         \--- org.junit.jupiter:junit-jupiter-api:5.11.4 (*)
|    +--- org.mockito:mockito-core:5.14.2
|    |    +--- net.bytebuddy:byte-buddy:1.15.4 -> 1.15.11
|    |    +--- net.bytebuddy:byte-buddy-agent:1.15.4 -> 1.15.11
|    |    \--- org.objenesis:objenesis:3.3
|    +--- org.mockito:mockito-junit-jupiter:5.14.2
|    |    +--- org.mockito:mockito-core:5.14.2 (*)
|    |    \--- org.junit.jupiter:junit-jupiter-api:5.11.2 -> 5.11.4 (*)
|    +--- org.skyscreamer:jsonassert:1.5.3
|    |    \--- com.vaadin.external.google:android-json:0.0.20131108.vaadin1
|    +--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.springframework:spring-test:6.2.5 (*)
|    +--- org.xmlunit:xmlunit-core:2.10.0
|    \--- org.junit.platform:junit-platform-launcher -> 1.11.4
|         +--- org.junit:junit-bom:5.11.4 (*)
|         \--- org.junit.platform:junit-platform-engine:1.11.4 (*)
\--- org.junit.platform:junit-platform-launcher -> 1.11.4 (*)

testRuntimeOnly - Runtime only dependencies for source set 'test'. (n)
\--- org.junit.platform:junit-platform-launcher (n)

(c) - A dependency constraint, not a dependency. The dependency affected by the constraint occurs elsewhere in the tree.
(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.
(n) - A dependency or dependency configuration that cannot be resolved.

 

 

gradle에는 dependency configurations (의존성 구성)이 존재하는데, 이는 특정 source set (main, test 등)에 대해 어떤 의존성을 어떤 방식으로 적용할지를 정의한다. 이들은 각 구성 목적에 따라 의존성이 적용되는 범위가 달라지는데, 핵심적인 범위들만 추려보면 다음과 같다.

  • implementation: 컴파일과 런타임에 모두 필요한 의존성, 해당 모듈의 API로 노출되지 않음
  • compileOnly: 컴파일 시에만 필요한 의존성
  • runtimeOnly: 런타임에만 필요한 의존성 (컴파일 시에는 필요 없음)
  • compileClasspath: 컴파일 시 사용되는 모든 의존성 집합, implementation, compileOnly 등을 기반으로 Gradle이 자동 구성함
  • runtimeClasspath: 런타임 시 필요한 모든 의존성 집합, implementation, runtimeOnly 등을 기반으로 Gradle이 자동 구성함
  • testImplementation, testCompileOnly, testRuntimeOnly, testCompileClasspath, testRuntimeClasspath 등: 위의 개념들이 테스트 소스셋에 적용되는 의존성 구성들

 

 

dependencies 명령어를 바로 적용하면 모든 의존성 구성을 보여주지만, 특정 configuration에 대해서만 보고 싶다면 --configuration 옵션을 사용하여 필터링할 수 있다. 예를 들어, runtimeClassPath 구성에 대한 의존성을 확인하고 싶다면 다음과 같이 명령어를 실행할 수 있는 것이다.

./gradlew dependencies --configuration runtimeClasspath

 

 

이제 다음의 더보기를 통해 지정된 runtimeClasspath 의존성 구성에 대한 내용들만 출력되었음을 확인할 수 있다.

더보기
+--- org.springframework.boot:spring-boot-starter-data-jpa -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4
|    |    +--- org.springframework.boot:spring-boot:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.5
|    |    |    |    \--- org.springframework:spring-jcl:6.2.5
|    |    |    \--- org.springframework:spring-context:6.2.5
|    |    |         +--- org.springframework:spring-aop:6.2.5
|    |    |         |    +--- org.springframework:spring-beans:6.2.5
|    |    |         |    |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |    |         +--- org.springframework:spring-expression:6.2.5
|    |    |         |    \--- org.springframework:spring-core:6.2.5 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.14.5
|    |    |              \--- io.micrometer:micrometer-commons:1.14.5
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.4.4
|    |    |    +--- ch.qos.logback:logback-classic:1.5.18
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.18
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.17
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.24.3
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.24.3
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.16 -> 2.0.17
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.17
|    |    |         \--- org.slf4j:slf4j-api:2.0.17
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    \--- org.yaml:snakeyaml:2.3
|    +--- org.springframework.boot:spring-boot-starter-jdbc:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- com.zaxxer:HikariCP:5.1.0
|    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    \--- org.springframework:spring-jdbc:6.2.5
|    |         +--- org.springframework:spring-beans:6.2.5 (*)
|    |         +--- org.springframework:spring-core:6.2.5 (*)
|    |         \--- org.springframework:spring-tx:6.2.5
|    |              +--- org.springframework:spring-beans:6.2.5 (*)
|    |              \--- org.springframework:spring-core:6.2.5 (*)
|    +--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    |    +--- jakarta.persistence:jakarta.persistence-api:3.1.0
|    |    +--- jakarta.transaction:jakarta.transaction-api:2.0.1
|    |    +--- org.jboss.logging:jboss-logging:3.5.0.Final -> 3.6.1.Final
|    |    +--- org.hibernate.common:hibernate-commons-annotations:7.0.3.Final
|    |    +--- io.smallrye:jandex:3.2.0
|    |    +--- com.fasterxml:classmate:1.5.1 -> 1.7.0
|    |    +--- net.bytebuddy:byte-buddy:1.15.11
|    |    +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 -> 4.0.2
|    |    |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    +--- org.glassfish.jaxb:jaxb-runtime:4.0.2 -> 4.0.5
|    |    |    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|    |    |         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|    |    |         +--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.eclipse.angus:angus-activation:2.0.2
|    |    |         |    \--- jakarta.activation:jakarta.activation-api:2.1.3
|    |    |         +--- org.glassfish.jaxb:txw2:4.0.5
|    |    |         \--- com.sun.istack:istack-commons-runtime:4.1.2
|    |    +--- jakarta.inject:jakarta.inject-api:2.0.1
|    |    \--- org.antlr:antlr4-runtime:4.13.0
|    +--- org.springframework.data:spring-data-jpa:3.4.4
|    |    +--- org.springframework.data:spring-data-commons:3.4.4
|    |    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    |    +--- org.springframework:spring-orm:6.2.4 -> 6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    +--- org.springframework:spring-jdbc:6.2.5 (*)
|    |    |    \--- org.springframework:spring-tx:6.2.5 (*)
|    |    +--- org.springframework:spring-context:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-aop:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-tx:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-beans:6.2.4 -> 6.2.5 (*)
|    |    +--- org.springframework:spring-core:6.2.4 -> 6.2.5 (*)
|    |    +--- org.antlr:antlr4-runtime:4.13.0
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.0.0 -> 2.1.1
|    |    \--- org.slf4j:slf4j-api:2.0.2 -> 2.0.17
|    \--- org.springframework:spring-aspects:6.2.5
|         \--- org.aspectj:aspectjweaver:1.9.22.1 -> 1.9.23
+--- org.springframework.boot:spring-boot-starter-validation -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    \--- org.hibernate.validator:hibernate-validator:8.0.2.Final
|         +--- jakarta.validation:jakarta.validation-api:3.0.2
|         +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.6.1.Final
|         \--- com.fasterxml:classmate:1.5.1 -> 1.7.0
+--- org.springframework.boot:spring-boot-starter-web -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-starter-json:3.4.4
|    |    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    |    +--- org.springframework:spring-web:6.2.5
|    |    |    +--- org.springframework:spring-beans:6.2.5 (*)
|    |    |    +--- org.springframework:spring-core:6.2.5 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.14.5 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.18.3
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.18.3 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.4.4
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.39
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.39
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.39
|    +--- org.springframework:spring-web:6.2.5 (*)
|    \--- org.springframework:spring-webmvc:6.2.5
|         +--- org.springframework:spring-aop:6.2.5 (*)
|         +--- org.springframework:spring-beans:6.2.5 (*)
|         +--- org.springframework:spring-context:6.2.5 (*)
|         +--- org.springframework:spring-core:6.2.5 (*)
|         +--- org.springframework:spring-expression:6.2.5 (*)
|         \--- org.springframework:spring-web:6.2.5 (*)
+--- org.springframework.boot:spring-boot-starter-actuator -> 3.4.4
|    +--- org.springframework.boot:spring-boot-starter:3.4.4 (*)
|    +--- org.springframework.boot:spring-boot-actuator-autoconfigure:3.4.4
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3 (*)
|    |    +--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    +--- org.springframework.boot:spring-boot-actuator:3.4.4
|    |    |    \--- org.springframework.boot:spring-boot:3.4.4 (*)
|    |    \--- org.springframework.boot:spring-boot-autoconfigure:3.4.4 (*)
|    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|    \--- io.micrometer:micrometer-jakarta9:1.14.5
|         +--- io.micrometer:micrometer-core:1.14.5
|         |    +--- io.micrometer:micrometer-commons:1.14.5
|         |    +--- io.micrometer:micrometer-observation:1.14.5 (*)
|         |    +--- org.hdrhistogram:HdrHistogram:2.2.2
|         |    \--- org.latencyutils:LatencyUtils:2.0.3
|         +--- io.micrometer:micrometer-commons:1.14.5
|         \--- io.micrometer:micrometer-observation:1.14.5 (*)
+--- io.micrometer:micrometer-registry-prometheus -> 1.14.5
|    +--- io.micrometer:micrometer-core:1.14.5 (*)
|    +--- io.prometheus:prometheus-metrics-core:1.3.6
|    |    +--- io.prometheus:prometheus-metrics-model:1.3.6
|    |    \--- io.prometheus:prometheus-metrics-config:1.3.6
|    +--- io.prometheus:prometheus-metrics-tracer-common:1.3.6
|    \--- io.prometheus:prometheus-metrics-exposition-formats:1.3.6
|         \--- io.prometheus:prometheus-metrics-exposition-textformats:1.3.6
|              +--- io.prometheus:prometheus-metrics-model:1.3.6
|              \--- io.prometheus:prometheus-metrics-config:1.3.6
\--- com.h2database:h2 -> 2.3.232

(c) - A dependency constraint, not a dependency. The dependency affected by the constraint occurs elsewhere in the tree.
(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.

 

 

위와 같은 의존성 트리를 통해 우리는 각 의존성이 어떤 버전으로 적용되고 있는지, 그리고 어떤 의존성들이 서로 연결되어 있는지를 파악할 수 있다. 예를 들어 org.springframework.boot:spring-boot-starter-data-jpa 의존성은 org.hibernate.orm:hibernate-core:6.6.11.Final을 포함하고 있으며, 이 의존성은 jakarta.persistence:jakarta.persistence-api:3.1.0와 같은 다른 의존성들을 필요로 한다는 것을 알 수 있다.

 

위의 내용 중에서 (*)와 (c)로 표시된 부분은 Gradle이 의존성 트리를 출력할 때, 어떤 의존성이 중복되거나 제약 조건으로 선언되었는지를 나타낸다.

  • (c): constraint (제약 조건)으로, 실제 의존성을 추가한 것이 아닌 버전을 고정하거나 강제하기 위해 BOM이나 platform, dependencyManagement에서 선언한 것
  • (*): ommited(중복 제거)로, 이전에 같은 dependency가 이미 출력되었기 때문에 생략되었다는 뜻

 

 

 

Gradle의 dependencyInsight Task

dependencies 태스트가 전체적인 구성을 파악하는 데 용이하다면, dependencyInsight 태스크는 특정 의존성에 대한 상세한 정보를 파악하는 데 용이하다. 다음의 명령어를 사용하여 특정 의존성에 대한 상세 정보를 확인할 수 있다.

./gradlew dependencyInsight --configuration runtimeClasspath --dependency jakarta.persistence-api

 

 

그러면 이제 다음과 같이 특정한 의존성 구성 중에서 특정한 의존성에 대한 상세한 정보를 확인할 수 있다.

jakarta.persistence:jakarta.persistence-api:3.1.0 (selected by rule)
Variant runtime:
| Attribute Name                 | Provided     | Requested    |
|--------------------------------|--------------|--------------|
| org.gradle.status              | release      |              |
| org.gradle.category            | library      | library      |
| org.gradle.libraryelements     | jar          | jar          |
| org.gradle.usage               | java-runtime | java-runtime |
| org.gradle.dependency.bundling |              | external     |
| org.gradle.jvm.environment     |              | standard-jvm |
| org.gradle.jvm.version         |              | 21           |

jakarta.persistence:jakarta.persistence-api:3.1.0
\\--- org.hibernate.orm:hibernate-core:6.6.11.Final
\\--- org.springframework.boot:spring-boot-starter-data-jpa:3.4.4
\\--- runtimeClasspath (requested org.springframework.boot:spring-boot-starter-data-jpa)

 

 

위의 결과를 통해 우리는 jakarta.persistence-api가 어느 경로를 통해서 왔는지도 간력하게 알 수 있지만, 왜 해당 라이브러리의 버전이 3.1.0으로 선택되었는지에 대한 정보 역시 개략적으로 추론할 수 있다. 먼저 상단의 jakarta.persistence:jakarta.persistence-api:3.1.0 (selected by rule)를 통해 무언가 BOM이나 platform을 통해 선택되었음을 알 수 있다. 하지만 그 외에 상세한 정보는 제공되지 않는데, 그 이유는 Spring Dependency Management 플러그인을 사용하기 때문인 경우가 많다.

plugins {
    id("io.spring.dependency-management") version "1.1.2"
}

 

 

Spring Dependency Management 플러그인은 스프링의 BOM(spring-boot-dependencies)을 통해 버전을 자동 관리해주는 Gradle용 플러그인으로, 보다 자세한 내용은 다음의 링크에 작성되어 있다.

  • Gradle에 BOM(Bill of Materials) 기능이 없던 시절의 유물이며, 이 플러그인의 유지 관리자조차도 사용을 권장하지 않음
  • Spring Dependency Management 플러그인은 Gradle의 의존성 분석 엔진에 깊이 관여하여, 이를 발견하기 어려운 방식으로 강제함

 

 

따라서 해당 플러그인의 사용 대신, Gradle의 내장 기능인 platform(...)을 사용을 권장하고 있는데, 이를 사용하면 해당 버전이 어디서 왔는지도 명확하게 확인할 수 있다고 한다. 위의 플러그인 선언을 제거하고, 다음과 같이 implementation(platform(..)) 블록을 사용하여 BOM을 선언하면 된다.

implementation(platform("org.springframework.boot:spring-boot-dependencies:3.4.4"))

 

 

이후 다시 위의 dependencyInsight 명령어를 실행하면, 다음과 같이 출력이 약간 달라졌음을 확인할 수 있다.

jakarta.persistence:jakarta.persistence-api:3.1.0 (by constraint)
  Variant runtime:
    | Attribute Name                 | Provided     | Requested    |
    |--------------------------------|--------------|--------------|
    | org.gradle.status              | release      |              |
    | org.gradle.category            | library      | library      |
    | org.gradle.libraryelements     | jar          | jar          |
    | org.gradle.usage               | java-runtime | java-runtime |
    | org.gradle.dependency.bundling |              | external     |
    | org.gradle.jvm.environment     |              | standard-jvm |
    | org.gradle.jvm.version         |              | 21           |

jakarta.persistence:jakarta.persistence-api:3.1.0
+--- org.hibernate.orm:hibernate-core:6.6.11.Final
|    +--- org.springframework.boot:spring-boot-dependencies:3.4.4
|    |    \\--- runtimeClasspath
|    \\--- org.springframework.boot:spring-boot-starter-data-jpa:3.4.4
|         +--- runtimeClasspath (requested org.springframework.boot:spring-boot-starter-data-jpa)
|         \\--- org.springframework.boot:spring-boot-dependencies:3.4.4 (*)
\\--- org.springframework.boot:spring-boot-dependencies:3.4.4 (*)

(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.

 

 

이제는 jakarta.persistence-api의 3.1.0 버전이 spring-boot-dependencies를 통해 선택되었음을 명확하게 알 수 있는 것이다. 해당 플러그인과 관련해서는 아래의 트러블 슈팅에서 다시 살펴보도록 하자.

 

 

 

 

[ NoClassDefFoundError, NoSuchFieldError와 같은 의존성 결정 문제 (Dependency Resolution Problem) 해결하기  ]

문제 상황 파악하기 

서비스를 운영하다 보면 NoClassDefFoundError, NoSuchFieldError와 같은 문제를 만나게 된다. 이러한 문제가 발생하는 이유는 의존성 버전이 서로 충돌하여, 특정 클래스나 필드가 존재하지 않는 경우가 많다.

 

 

위의 예제에서는 Apache HttpClient5의 ConnectionConfig 클래스가 존재하지 않아서 발생했다. 결론부터 정리하면 위의 에러가 발생한 이유는 2개의 라이브러리에서 모두 Apache HttpClient5를 사용했는데, 사용하는 버전이 달랐기 때문이다.

  • Spring Boot & Spring Cloud: Apache HttpClient5 5.1.4
  • ClickHouse JDBC: Apache HttpClient5 5.2.1

 

Spring Boot와 Spring Cloud에서는 호환되는 HttpClient5 버전이 5.1.4 인데 반해, ClickHouse JDBC에서는 5.2.1 버전이 호환되기 때문이다. 즉, ClickHouse 입장에서는 5.2.1을 기준으로 존재하는 ConnectionConfig 클래스를 참조하려고 했지만, 실제 내부적으로는 5.1.4 버전이 선택되어 해당 클래스가 존재하지 않았던 것이다. 이제 이러한 문제가 생겼을 때 어떻게 해결할 수 있는지 그 흐름을 따라가 보도록 하자.

 

 

 

dependencies task를 통해 의존성 정보 확인하기

먼저 Gradle dependencies 태스크를 사용하여 현재 프로젝트의 의존성 트리를 확인해주도록 하자.

./gradlew dependenceis --configuration runtimeClassPath

 

 

그러면 다음과 같이 2개의 라이브러리에서 HttpClient5를 사용중이고, 5.1.4 버전이 선택되었음을 확인할 수 있다.

 

 

 

dependencyInsight task를 통해 버전 결정 정보 확인하기

그 다음 dependencyInsight 태스크를 사용하여 HttpClient5의 버전이 선택된 상세 정보를 확인해보자.

./gradlew dependencyInsight --configuration runtimeClassPath --dependency httpclient5

 

 

그러면 위의 출력 결과를 통해 다음과 같은 정보를 확인할 수 있다.

  • 더 높은 5.2.1 버전이 존재함에도 불구하고 최종적으로 선택된 httpclient5 버전은 5.1.4임
  • ‘selected by rule’을 통해 무언가에 의해 5.1.4이 강제적으로 선택되었음

 

 

spring-cloud-config-dependencies에 의한 BOM(Bill of Materials)이 존재하기 때문에, 해당 BOM이 문제를 일으킬 수 있다고 추론할 수 있다. 따라서 해당 BOM에 대한 부분을 먼저 제거해주도록 하자.

 

 

 

spring-cloud-config-dependencies의 BOM 제거하기

build.gradle 파일에서 spring-cloud-config-dependencies BOM을 제거한 후에 다시 dependencyInsight 태스크를 사용하도록 하자. 물론 상황에 따라서는 해당 BOM을 제거하면 안되는 경우도 있을 수 있는데, 현재는 분석 연습을 위한 내용이니 제거해도 괜찮다는 전제 하에 제거하도록 하자.

./gradlew dependencyInsight --configuration runtimeClassPath --dependency httpclient5

 

 

하지만 그럼에도 불구하고 여전히 5.1.4 버전이 선택되었음을 확인할 수 있다.

 

 

왜 여전히 해당 버전이 선택되었는지 보다 상세한 정보를 위해, debug 모드로 실행해보도록 하자.

./gradlew dependencyInsight --configuration runtimeClassPath --dependency httpclient5 --debug

 

 

그러면 다음과 같은 내용이 나오는데, 이를 통해 무언가 전역적인 관리 설정에 의해 5.1.4 버전이 선택되었음을 알 수 있다.

 

 

그리고 해당 부분에 BreakPoint를 걸고 실행을 해보면, 다음과 같이 Spring Dependency Management 플러그인에 의해 BOM이 추가되었고, 이로 인해 5.1.4 버전이 강제되었음을 알 수 있다.

 

 

 

 

Spring Dependency Plugin 제거하기

다음의 Gradle Forum 글을 참고하면, Spring Dependency Management 플러그인에 대한 내용을 확인할 수 있다.

  • Spring Dependency Management 플러그인은 Gradle의 의존성 해석 엔진에 깊이 관여하여, 정확한 버전 결정의 이유를 발견하기 어려운 방식으로 동작함
  • Spring Dependency Management 플러그인은 Gradle에 BOM(Bill of Materials) 기능이 없던 시절의 유물이며, 이 플러그인의 메인테이너조차도 사용을 권장하지 않음
  • 내부적으로 의존성 버전을 강제(override) 하는데, 같은 dependency가 여러 버전 존재할 경우, 플러그인을 통해 지정한 버전을 항상 우선하여 선택함

 

 

해당 플러그인 대신 Gradle의 내장 기능인 platform(...)을 사용하면, 해당 버전이 어디서 왔는지도 명확하게 확인할 수 있다고 한다. 따라서 먼저 "io.spring.dependency-management" 플러그인을 제거해주도록 하자. 그리고 다음과 같이 platform(...) 블록을 사용하여 BOM을 선언해주도록 하자.

implementation(platform("org.springframework.boot:spring-boot-dependencies:3.0.12"))

 

 

이제 다시 dependencyInsight 태스크를 실행해보도록 하자.

./gradlew dependencyInsight --configuration runtimeClassPath --dependency httpclient5

 

 

다음과 같이 5.2.1 버전이 선택되었음을 확인할 수 있다.

 

 

 

 

 

물론 이렇게 의존성을 5.2.1 버전으로 수정하게 되면, 혹여나 5.1.4 버전을 필요로 하는 라이브러리가 있을 경우 문제를 유발할 가능성이 있다. 하지만 본 내용에서는 어떻게 의존성 결정 문제를 해결할 수 있는지에 대한 흐름을 따라가 보는 것이 목적이다. 따라서 실제로 어떻게 해결하면 좋을지는 여러 가지 버전 호환성을 고려해서 수정하는 것이 바람직할 것이다.

 

 

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함