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.

290 lines
13 KiB
Groovy

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//--------------------------------------------------------------------------------------
// gradle에서는 스크립트 위치 중요
// plugins{} 전에는 buildscript{}와 plugins{} 만 가능
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
buildscript {
ext {
springBootVersion ='2.6.3'
queryDslVersion = "5.0.0"
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
}
}
plugins {
//id 'application'
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
}
// buildscript
group = 'com.xit'
version = '0.0.1-SNAPSHOT'
description = 'xit-opst-bo'
sourceCompatibility = '11'
// WAS로 배포하는 경우 : bootWar.enabled = false
bootWar.enabled = false
bootWar{
enabled(false)
archiveName('opst-bo.war')
}
war{
enabled(true)
archiveName('ROOT.war')
// webInf {
// from("${buildDir}/resources/main")
// }
}
repositories {
mavenCentral()
google()
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
//dependency is used by the application.
implementation 'com.google.guava:guava:30.1.1-jre'
//-----------------------------------------------------------------------------------//
// Core
//-----------------------------------------------------------------------------------//
// spring boot core
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-configuration-processor'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
// mybatis
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
//implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter'
// config 암호화 사용
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'
// spring-boot 2.3 까지는 사용 불가 - spring-boot-starter-web에 포함되어 있다
// hibernate-validator:5.2.4.Final 사용
implementation 'org.springframework.boot:spring-boot-starter-validation'
// spring-boot 2.3 까지는 아래 lib 사용
//implementation 'org.hibernate:hibernate-validator:5.2.4.Final'
// jta module
//implementation('org.springframework.boot:spring-boot-starter-jta-atomikos')
// yaml 다국화 lib
implementation 'net.rakugakibox.util:yaml-resource-bundle:1.2'
// social login
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Java Web Token
//-----------------------------------------------------------------------------------//
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Mybatis
//-----------------------------------------------------------------------------------//
implementation 'org.mybatis:mybatis:3.5.9'
//implementation 'org.mybatis:mybatis-typehandlers-jsr310:1.0.2'
implementation 'org.mybatis:mybatis-spring:2.0.6'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// JPA
//-----------------------------------------------------------------------------------//
// JPA logging p6spy
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0'
// implementation 'p6spy:p6spy:3.9.1'
// JPA querydsl ----------------------------------------------
implementation "com.querydsl:querydsl-jpa"
// querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
// java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 대응
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// java.lang.NoClassDefFoundError (javax.annotation.Generated) 발생 대응
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// ------------------------------------------------------------
// JPA mapstruct -----------------------------------------------------------
// lombok 과 함께 사용시 반드시 순서 지겨야 함다 - ㅡmapstruct이 먼저 선언된 경우
// target class 에 @Builder 가 있어도 무시하고 생성자 + setter 를 사용하므로 정상적으로 Mapper 클래스를 Generation 하기 위해서
// @NoArgsConstructor, @Setter 가 필요
// but, 최근 Setter 사용을 지양하는 추세라 mapstruct를 먼저 오도록 해서 @Builder 방식으로 Generation
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
implementation 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
annotationProcessor 'org.projectlombok:lombok'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Springdoc : swagger
//-----------------------------------------------------------------------------------//
implementation 'org.springdoc:springdoc-openapi-ui:1.6.3'
implementation 'org.springdoc:springdoc-openapi-security:1.6.3'
implementation 'org.springdoc:springdoc-openapi-data-rest:1.6.3'
implementation 'org.springdoc:springdoc-openapi-webmvc-core:1.6.3'
//-----------------------------------------------------------------------------------//
// Xss Injection avoid : Naver lucy-xss
//-----------------------------------------------------------------------------------//
implementation 'com.navercorp.lucy:lucy-xss-servlet:2.0.1'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// slack webhook : logback slack webhook
//-----------------------------------------------------------------------------------//
implementation 'com.github.maricn:logback-slack-appender:1.4.0'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// DB driver
//-----------------------------------------------------------------------------------//
runtimeOnly 'com.h2database:h2:1.4.199' // 2.0.202 사용시 에러 발생
implementation 'org.postgresql:postgresql:42.3.1'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Webflux
//-----------------------------------------------------------------------------------//
//implementation 'org.springframework.boot:spring-boot-starter-webflux'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// 3rd-party lib
//-----------------------------------------------------------------------------------//
// AOP
implementation 'org.aspectj:aspectjrt'
implementation 'org.aspectj:aspectjweaver'
// simple captcha
implementation fileTree(dir: 'repo', include: ['*.jar'])
//implementation fileTree(dir: 'repo', include: 'simplecaptcha-1.2.1.jar')
//implementation fileTree(dir: 'repo', include: 'ojdbc8.jar')
// amazon aws s3
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.131'
// excel poi
implementation 'org.apache.poi:poi-ooxml:4.1.2' //5.0.0 사용시 에러 : poi-ooxml-schemas
implementation 'org.apache.poi:poi:4.1.2' //5.0.0 사용시 에러 implementation 'org.apache.commons:commons-lang3:3.12.0'
// Object Deep-copy : Cloner
implementation 'uk.com.robust-it:cloning:1.9.12'
// Get Device 정보 : Device / UserAgent
implementation 'org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE'
implementation 'eu.bitwalker:UserAgentUtils:1.21'
// 문자열 type check : UniversalDetector - excel
implementation 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3'
implementation 'org.apache.httpcomponents:httpcore:4.4.15'
implementation 'commons-collections:commons-collections:3.2.2'
implementation 'commons-fileupload:commons-fileupload:1.4'
implementation 'commons-io:commons-io:2.11.0'
implementation 'javax.mail:mail:1.4.7'
implementation 'org.codehaus.jackson:jackson-core-asl:1.9.13'
// google json
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
implementation 'com.google.code.gson:gson:2.8.9'
// jackson
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.1'
implementation 'com.fasterxml.jackson.module:jackson-module-afterburner:2.13.1'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.1'
// JAP LAZY loading시 객체생성 (OneToMay <--> ManyToOne)
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'
//implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.5'
// response xml
implementation 'javax.xml.bind:jaxb-api:2.3.1'
//implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.5'
//-----------------------------------------------------------------------------------//
// https://mvnrepository.com/artifact/com.googlecode.juniversalchardet/juniversalchardet
implementation group: 'com.googlecode.juniversalchardet', name: 'juniversalchardet', version: '1.0.3'
//-----------------------------------------------------------------------------------//
// Test
//-----------------------------------------------------------------------------------//
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
// querydsl
testImplementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
testAnnotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Development environment
//-----------------------------------------------------------------------------------//
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
providedCompile 'org.springframework.boot:spring-boot-starter-tomcat'
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
// Deployment environment : war 배포를 위한 내장 톰캣 추가
//-----------------------------------------------------------------------------------//
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
//-----------------------------------------------------------------------------------//
// querydsl
//-----------------------------------------------------------------------------------//
/** clean 태스크 실행시 QClass 삭제 */
/**
* Intellij IDEA - Build, Execution, Deployment - Build tools → Gradle 에서 Build and run 설정값에 따라 Annotation processor 생성물 위치가 달라짐
* Gradle: 각 모듈별 build/generated/sources/annotationProcessor/java/main
* Q생성물에 대한 별도의 정리작업을 하지 않아도 clean 태스크로 정리 가능
* IntellijI IDEA: 각 모듈별 src/main/generated
* Compiler Annotation procesoors 설정영향받음
* 기존 Q클래스는 갱신되지만, 엔티티 위치가 변경되거나 삭제된 경우 Q클래스는 그대로 유지
* Build, Execution, Deployment - Compiler -> Enable annotaion processing 활성화 필요
*/
clean {
delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}
test {
exclude '**/*'
//useJUnitPlatform()
}