티스토리 뷰
[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 버전을 필요로 하는 라이브러리가 있을 경우 문제를 유발할 가능성이 있다. 하지만 본 내용에서는 어떻게 의존성 결정 문제를 해결할 수 있는지에 대한 흐름을 따라가 보는 것이 목적이다. 따라서 실제로 어떻게 해결하면 좋을지는 여러 가지 버전 호환성을 고려해서 수정하는 것이 바람직할 것이다.
'Server' 카테고리의 다른 글
[Kafka] 올바른 카프카 컨슈머(KafkaConsumer) 설정 가이드와 내부 동작 분석 (7) | 2025.06.24 |
---|---|
[Server] COW(CopyOnWrite) 기법과 이를 활용하는 자바와 레디스의 예시들(COW on Java and Redis) (2) | 2025.06.10 |
[Server] Logback AsyncAppender의 동작 방식과 neverBlock 설정의 필요성 (0) | 2025.05.27 |
[Server] K6 부하 테스트 시나리오 작성하고 결과 지표 분석하기(K6 Load Testing) (2) | 2025.04.01 |
[LLM] MCP(Model Context Protocol)에 대하여 알아보고 IntelliJ와 Claude를 MCP로 연동하기 (11) | 2025.03.25 |