# 태스크 전체 22:configurations.configureEach { 23: exclude group: 'tools.jackson.dataformat', module: 'jackson-dataformat-yaml' 24: exclude group: 'org.yaml', module: 'snakeyaml' 25: exclude group: 'org.snakeyaml', module: 'snakeyaml-engine' 26:} 28:tasks.register('verifyJsonSchemaRuntimeGraph') { 29: group = 'verification' 30: description = 'Verifies the closed Jackson 3 / NetworkNT graph contains no YAML or Jackson 2 runtime.' 31: doLast { 32: Set modules = configurations.runtimeClasspath.incoming.resolutionResult 33: .allComponents 34: .findAll { it.moduleVersion != null } 35: .collect { 36: "${it.moduleVersion.group}:${it.moduleVersion.name}:${it.moduleVersion.version}" 37: .toString() 38: } as Set 39: List forbidden = modules.findAll { String coordinate -> 40: String lowered = coordinate.toLowerCase(Locale.ROOT) 41: lowered.contains('yaml') || 42: lowered.startsWith('org.yaml:') || 43: lowered.startsWith('org.snakeyaml:') || 44: lowered ==~ /com\.fasterxml\.jackson\.core:jackson-(core|databind):.*/ 45: }.sort() 46: if (!forbidden.isEmpty()) { 47: throw new GradleException( 48: "Messaging JSON runtime contains forbidden Jackson 2/YAML modules: ${forbidden}") 49: } 50: [ 51: 'com.networknt:json-schema-validator:3.0.2', 52: 'tools.jackson.core:jackson-core:3.0.2', 53: 'tools.jackson.core:jackson-databind:3.0.2' 54: ].each { String required -> 55: if (!modules.contains(required)) { 56: throw new GradleException( 57: "Messaging JSON runtime is missing required locked module ${required}") 58: } 59: } 60: // Jackson 3 intentionally retains the 2.x-namespace annotations artifact. It is not a 61: // Jackson 2 databind/runtime engine and is part of the official Jackson 3 BOM graph. 62: } 63:} 64: 65:tasks.named('check') { 66: dependsOn tasks.named('verifyJsonSchemaRuntimeGraph') 67:} # 이 태스크 이름이 나오는 곳 전부 (확장자 제한 없음) src/build.gradle:850: dependsOn ':adapter:outbound:messaging:verifyJsonSchemaRuntimeGraph' src/build.gradle:892: dependsOn ':adapter:outbound:messaging:verifyJsonSchemaRuntimeGraph' src/adapter/outbound/messaging/README.md:139:Gradle dependency lock과 `verifyJsonSchemaRuntimeGraph`가 담당한다. 이 검증은 business schema src/adapter/outbound/messaging/build.gradle:28:tasks.register('verifyJsonSchemaRuntimeGraph') { src/adapter/outbound/messaging/build.gradle:66: dependsOn tasks.named('verifyJsonSchemaRuntimeGraph') src/adapter/outbound/messaging/CLAUDE.md:55: `CodeSource` is a regular JAR. Strict dependency locks and `verifyJsonSchemaRuntimeGraph` own the # CI 가 check 를 부르는 곳 50: run: ./gradlew check verifyPublicPathSnapshot verifyDependencyLocks --warning-mode=fail --no-daemon --stacktrace release-gate: needs: - quality-gates - sample-off - gate-matrix-lint - redis-sdk - jpa-candidate-evidence if: always() # 상위 자격 태스크를 부르는 workflow verifyMessagingJsonSchemaV1 / verifyMessagingContracts 가 .github 아래 나오는 줄 : 0 # 금지 목록에서 빠져 있는 Jackson 2 아티팩트 8:com.fasterxml.jackson.core:jackson-annotations:2.21=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath