Files
dap-was-dapmt/build.gradle
jade 311462d613
All checks were successful
Deploy Tools / deploy (push) Successful in 50s
gradle 업데이트
2026-08-20 15:18:47 +09:00

239 lines
8.7 KiB
Groovy

plugins {
id 'java'
id 'org.springframework.boot' version '3.5.11'
id 'io.spring.dependency-management' version '1.1.7'
}
// ============================================================================
// 전체 프로젝트 공통 Maven 좌표
// ============================================================================
allprojects {
// 모든 모듈이 공유하는 Maven Group ID입니다.
group = 'io.shinhanlife'
// 모든 모듈이 공유하는 프로젝트 버전입니다.
version = '0.0.1-SNAPSHOT'
}
subprojects {
// 모든 하위 모듈에서 Java Plugin을 사용합니다.
apply plugin: 'java'
// Spring Boot BOM 기반 의존성 버전 관리를 위해 적용합니다.
apply plugin: 'io.spring.dependency-management'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
// --------------------------------------------------------------------
// 외부 개발 환경
// --------------------------------------------------------------------
//
// 현재 인터넷이 가능한 환경에서는 Maven Central을 사용합니다.
//
// 신한라이프 폐쇄망 반입 시 아래 mavenCentral()은 제거하고
// 사내 Nexus Repository URL로 교체해야 합니다.
//
// 예:
//
// maven {
// url = uri('https://내부-Nexus/repository/maven-public/')
// }
//
// Nexus 인증이 필요한 경우에는 credentials 설정도 추가해야 합니다.
//
// credentials {
// username = findProperty('nexusUsername') ?: System.getenv('NEXUS_USERNAME')
// password = findProperty('nexusPassword') ?: System.getenv('NEXUS_PASSWORD')
// }
//
// 계정/비밀번호를 build.gradle에 직접 작성하면 안 됩니다.
// --------------------------------------------------------------------
mavenCentral()
}
// ========================================================================
// Dependency Version Management
// ========================================================================
dependencyManagement {
imports {
// Spring Boot 3.5.11이 검증한
// Spring Framework / Jackson / Tomcat / Logback /
// JUnit 등 주요 라이브러리 버전을 공통 관리합니다.
// 하위 모듈에서는 Spring Boot가 관리하는 라이브러리라면
// 가급적 개별 버전을 직접 지정하지 않고 사용합니다.
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
// MCP SDK 버전 관리
mavenBom 'io.modelcontextprotocol.sdk:mcp-bom:2.0.0'
}
}
// ========================================================================
// Common Dependencies
// ========================================================================
dependencies {
// ====================================================================
// Lombok
// ====================================================================
// Lombok은 컴파일 시 Getter / Setter / Builder 등의
// 반복 코드를 생성합니다.
//
// compileOnly이므로 Runtime JAR에는 포함되지 않습니다.
compileOnly 'org.projectlombok:lombok:1.18.32'
// Lombok Annotation Processor입니다.
annotationProcessor 'org.projectlombok:lombok:1.18.32'
// 테스트 코드에서도 Lombok Annotation을 사용할 수 있도록 합니다.
testCompileOnly 'org.projectlombok:lombok:1.18.32'
// 테스트 코드용 Lombok Annotation Processor입니다.
testAnnotationProcessor 'org.projectlombok:lombok:1.18.32'
// ====================================================================
// MapStruct
// ====================================================================
// Tool DTO와
// MCI 요청/응답 DTO 사이의 Converter 구현체를
// 컴파일 시 자동 생성하기 위해 사용합니다.
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
// Lombok과 MapStruct Annotation Processor가
// 함께 동작할 때 발생할 수 있는 처리 순서 문제를 해결합니다.
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
// MapStruct Converter 구현 클래스를 생성하는
// Annotation Processor입니다.
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
// ====================================================================
// Test
// ====================================================================
// Spring Boot Test / JUnit 5 / Mockito / AssertJ 등
// 공통 테스트 환경을 제공합니다.
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Gradle / IDE 환경에서 JUnit Platform 기반 테스트 실행을 지원합니다.
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
// ========================================================================
// Java Compile Options
// ========================================================================
tasks.withType(JavaCompile).configureEach {
// Reflection 및 MCP Schema 생성 시
// Java 메서드의 실제 파라미터명을 사용할 수 있도록
// 컴파일 결과에 파라미터 이름을 보존합니다.
options.compilerArgs << '-parameters'
// MapStruct가 생성하는 Converter 구현 클래스를
// Spring Bean(@Component)으로 생성합니다.
//
// 이를 통해 생성자 주입 등의 방식으로 사용할 수 있습니다.
options.compilerArgs << '-Amapstruct.defaultComponentModel=spring'
}
// ========================================================================
// Test Configuration
// ========================================================================
tasks.withType(Test).configureEach {
// 모든 하위 모듈에서 JUnit 5 Platform을 사용합니다.
useJUnitPlatform()
}
}
// ============================================================================
// Tool Validation
// ============================================================================
// Tool Annotation / Tool Schema 검증 프로그램이 들어있는
// 공통 라이브러리 프로젝트입니다.
def toolCoreProject = project(':dat-was-lib')
// ============================================================================
// MCP Tool Name Validation
// ============================================================================
// 전체 Tool Pod 프로젝트에서 선언된
// @McpTool(name = "...") 값의 중복 여부를 검사합니다.
//
// 동일한 Tool Name이 존재하면 배포 산출물 생성 전에
// 빌드를 실패시켜 중복 Tool이 배포되는 것을 차단합니다.
tasks.register('validateMcpToolNames', JavaExec) {
// Gradle Verification Task 그룹으로 분류합니다.
group = 'verification'
// Gradle Tasks 조회 시 표시되는 설명입니다.
description = 'Checks duplicate @McpTool names across all Tool modules before packaging.'
// 검사 프로그램이 dat-was-lib에 존재하므로
// JavaExec 실행 전에 dat-was-lib의 classes 작업을 수행합니다.
dependsOn toolCoreProject.tasks.named('classes')
// dat-was-lib의 Runtime Classpath를
// Tool Validation Runner 실행 Classpath로 사용합니다.
classpath = toolCoreProject.sourceSets.main.runtimeClasspath
// Tool Name 중복 검증을 수행하는 Main Class입니다.
mainClass.set(
'io.shinhanlife.dat.lib.validation.McpToolNameValidationRunner'
)
// 전체 멀티모듈 프로젝트를 검사할 수 있도록
// Root Project 경로를 Runner의 Argument로 전달합니다.
args rootProject.projectDir.absolutePath
}
// ============================================================================
// BootJar Validation Hook
// ============================================================================
subprojects {
// Spring Boot 실행 모듈에서 bootJar를 수행할 경우
// 실제 배포 JAR이 만들어지기 전에
//
// 1. MCP Tool Name 중복 검사
// 2. Tool Schema V17 검사
//
// 두 검증 작업을 반드시 수행하도록 합니다.
tasks.matching { it.name == 'bootJar' }.configureEach {
// @McpTool Name 중복 검증
dependsOn rootProject.tasks.named('validateMcpToolNames')
}
}