You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
7.8 KiB
Groovy

/**
* XIT Framework Gradle 빌드 설정 파일
*
* 주요 버전 정보:
* - Spring Boot: 2.7.18 (스프링 부트 버전)
* - Java: 1.8 (소스 및 타겟 호환성)
* - 전자정부 프레임워크: 4.3.0
*/
plugins {
// 스프링 부트 플러그인 - 스프링 부트 애플리케이션 빌드 및 실행을 지원
id 'org.springframework.boot' version '2.7.18'
// 스프링 의존성 관리 플러그인 - 스프링 부트 버전에 맞는 의존성 버전 관리
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
// 자바 플러그인 - 자바 소스 컴파일 지원
id 'java'
// WAR 플러그인 - 웹 애플리케이션 아카이브 생성 지원
id 'war'
}
// 프로젝트 그룹 및 버전 정보
group = 'go.kr.project'
version = '0.0.1-SNAPSHOT'
// 자바 버전 설정 (소스 및 타겟 호환성)
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
// Java 컴파일 옵션 설정
//tasks.withType(JavaCompile) {
// options.encoding = 'UTF-8'
// options.compilerArgs += [
// '-Xlint:deprecation',
// '-Xlint:unchecked'
// ]
//}
// 설정 구성
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
// 저장소 설정
repositories {
mavenCentral() // 메이븐 중앙 저장소
maven { url 'https://maven.egovframe.go.kr/maven/' } // 전자정부 프레임워크 저장소
}
// 버전 변수 정의
ext {
// 서버 관련 버전
tomcatVersion = '9.0.78' // 톰캣 9 버전 (Servlet 3.1 지원)
// 라이브러리 버전
tilesVersion = '3.0.8' // 타일즈 버전
mybatisVersion = '2.3.1' // 마이바티스 스프링 부트 스타터 버전
commonsTextVersion = '1.10.0' // 아파치 커먼스 텍스트 버전
egovFrameVersion = '4.3.0' // 전자정부 프레임워크 버전
}
dependencies {
// ===== 스프링 부트 핵심 의존성 =====
// 스프링 부트 웹 스타터 - MVC, REST, 내장 톰캣 등 웹 개발에 필요한 기본 의존성 포함
implementation 'org.springframework.boot:spring-boot-starter-web'
// 스프링 부트 유효성 검사 스타터 - Bean Validation API 구현체 포함
implementation 'org.springframework.boot:spring-boot-starter-validation'
// 스프링 부트 AOP 스타터 - 관점 지향 프로그래밍 지원
implementation 'org.springframework.boot:spring-boot-starter-aop'
// 스프링 부트 JDBC 스타터 - JDBC 및 커넥션 풀(HikariCP) 포함
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
//implementation 'org.springframework.boot:spring-boot-starter-data-jpa' /* 실제 사용 X, intellij plugin 사용을 위해 설정 */
// ===== 전자정부 프레임워크 의존성 =====
// 전자정부 프레임워크 공통 기능 - 공통 유틸리티 및 예외 처리 등
implementation("org.egovframe.rte:org.egovframe.rte.fdl.cmmn:${egovFrameVersion}") {
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl' /* 보안이슈 대응 후 쿼리로그 문제 발생, SLF4J 충돌 발생 */
}
// 전자정부 프레임워크 MVC - 웹 MVC 관련 기능
implementation("org.egovframe.rte:org.egovframe.rte.ptl.mvc:${egovFrameVersion}") {
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl' /* 보안이슈 대응 후 쿼리로그 문제 발생, SLF4J 충돌 발생 */
}
// ===== 로깅 의존성 =====
// Logback - 로깅 구현체
implementation 'ch.qos.logback:logback-classic'
implementation 'ch.qos.logback:logback-core'
// SLF4J - 로깅 퍼사드 인터페이스
implementation 'org.slf4j:slf4j-api'
// ===== 서블릿 & JSP 관련 의존성 =====
// JSTL - JSP 표준 태그 라이브러리
implementation 'javax.servlet:jstl'
// ===== 톰캣 설정 =====
// 톰캣 9 명시적 설정 (Servlet 3.1 지원)
implementation "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}"
implementation "org.apache.tomcat.embed:tomcat-embed-el:${tomcatVersion}"
implementation "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
// ===== 타일즈 의존성 =====
// 타일즈 - 레이아웃 템플릿 엔진 (JSP 페이지 조각 조합)
implementation "org.apache.tiles:tiles-jsp:${tilesVersion}"
implementation "org.apache.tiles:tiles-core:${tilesVersion}"
implementation "org.apache.tiles:tiles-api:${tilesVersion}"
implementation "org.apache.tiles:tiles-servlet:${tilesVersion}"
implementation "org.apache.tiles:tiles-el:${tilesVersion}"
// ===== 데이터 액세스 의존성 =====
// MyBatis 스프링 부트 스타터 - SQL 매핑 프레임워크
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisVersion}"
// MariaDB JDBC 드라이버 - MariaDB 데이터베이스 연결
implementation 'org.mariadb.jdbc:mariadb-java-client'
// HikariCP - 고성능 JDBC 커넥션 풀 (spring-boot-starter-jdbc에 포함됨)
// ===== 유틸리티 의존성 =====
// Apache Commons Text - 텍스트 처리 유틸리티
implementation "org.apache.commons:commons-text:${commonsTextVersion}"
// ===== EXCEL =====
implementation 'org.apache.poi:poi:5.3.0'
implementation 'org.apache.poi:poi-ooxml:5.3.0'
// ===== Swagger UI =====
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
implementation 'org.springdoc:springdoc-openapi-webmvc-core:1.7.0'
// ===== sqlPaser =====
implementation 'com.github.jsqlparser:jsqlparser:4.5'
// ===== datasource-proxy =====
// 파라미터 바인딩된 SQL 쿼리 로깅을 위한 datasource-proxy
implementation 'net.ttddyy:datasource-proxy:1.10.1'
// ===== 개발 도구 의존성 =====
// Lombok - 반복 코드 생성 도구 (Getter, Setter, Builder 등 자동 생성)
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// 스프링 부트 개발 도구 - 자동 재시작, 라이브 리로드 등
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// ===== 테스트 의존성 =====
// 스프링 부트 테스트 스타터 - JUnit, Mockito 등 테스트 도구 포함
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// ===== 배포 관련 의존성 =====
// 톰캣 서블릿 API - 외부 톰캣 배포 시 사용
providedCompile "org.apache.tomcat:tomcat-servlet-api:${tomcatVersion}"
// 스프링 부트 톰캣 - 외부 톰캣 배포 시 내장 톰캣 제외
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
// ===== 리소스 필터링 설정 =====
// application*.yml 파일에서 @변수명@ 플레이스홀더를 gradle.properties의 값으로 치환
processResources {
// application*.yml 파일에서만 @projectName@ 치환
filesMatching('application*.yml') {
filter { line ->
line.replaceAll('@projectName@', project.property('projectName').toString())
}
}
}
// ===== 테스트 설정 =====
// JUnit 플랫폼을 사용하여 테스트 실행 (JUnit 5 지원)
tasks.named('test') {
useJUnitPlatform()
}
// ===== WAR 파일 설정 =====
// 생성될 WAR 파일의 이름 지정 (gradle.properties의 프로젝트명 전역변수 사용)
war {
archiveFileName = "${projectName}.war"
}
// ===== bootWar 파일 설정 =====
// 생성될 bootWar 파일의 이름 지정 (gradle.properties의 프로젝트명 전역변수 사용)
bootWar {
archiveFileName = "${projectName}-BOOT.war"
}
// war 포함 압축 푼 소스 포함,
// ./build/exploded/{프로젝트명}/
tasks.register('exploded', Copy) {
dependsOn 'war'
from zipTree(tasks.war.archiveFile)
into layout.buildDirectory.dir("exploded/${project.name}")
doFirst {
layout.buildDirectory.dir("exploded/${project.name}").get().asFile.deleteDir()
}
}