//-------------------------------------------------------------------------------------- // gradle에서는 스크립트 위치 중요 // plugins{} 전에는 buildscript{}와 plugins{} 만 가능 //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- buildscript { ext { springBootVersion ='2.6.1' } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion") // JPA querydsl //classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10") } } plugins { //id 'application' id 'org.springframework.boot' version '2.6.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' //id 'net.ltgt.apt' version '0.21' // querydsl //id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' //id 'org.openapi.generator' version '5.1.1' // docker : jib // bootWar --> jibDockerBuild //id 'com.google.cloud.tools.jib' version '3.1.2' // } // buildscript group = 'com.xit' version = '0.0.1-SNAPSHOT' description = 'xit-framework' sourceCompatibility = '11' // WAS로 배포하는 경우 : bootWar.enabled = false bootWar.enabled = true war.enabled = true 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' // spring-boot-starter-validation을 포함 // 2.3 이상 부터 제외, 따라서 반드시 Validation 필요 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' // yaml 다국화 lib implementation 'net.rakugakibox.util:yaml-resource-bundle:1.2' // 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' // 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 //compileOnly 'com.querydsl:querydsl-jpa' //compileOnly 'com.querydsl:querydsl-apt' // JPA mapstruct : lombok 과 함께 사용시 반드시 순서 지겨야 함다 - lombok이 먼저 선언된 경우 // implementation 'org.projectlombok:lombok-mapstruct-binding:0.2.0' // implementation 'org.projectlombok:lombok' // implementation 'org.mapstruct:mapstruct:1.4.2.Final' // annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0" // annotationProcessor 'org.projectlombok:lombok' // annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' // 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']) // 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 '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' implementation 'com.fasterxml.jackson.core:jackson-core:2.13.1' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.1' 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.core:jackson-databind:2.13.1' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.13.1' implementation 'javax.xml.bind:jaxb-api:2.3.1' //implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.5' //-----------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------// // Test //-----------------------------------------------------------------------------------// testImplementation 'org.springframework.security:spring-security-test' testImplementation ('org.springframework.boot:spring-boot-starter-test'){ exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' //'junit:junit:4.13.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' //'junit:junit:4.13.2' testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2' //'junit:junit:4.13.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' //'junit:junit:4.13.2' implementation 'org.assertj:assertj-core:3.21.0' 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' //-----------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------// // Template engine : thymeleaf //-----------------------------------------------------------------------------------// //implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' //implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.5.3' //implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.0.4.RELEASE' //-----------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------// // JSP //-----------------------------------------------------------------------------------// //compileOnly 'org.apache.tomcat.embed:tomcat-embed-jasper' //compileOnly 'javax.servlet:jstl' //-----------------------------------------------------------------------------------// //-----------------------------------------------------------------------------------// // Web library //-----------------------------------------------------------------------------------// // implementation 'org.webjars:webjars-locator:0.41' // implementation 'org.webjars:webjars-locator-core:0.47' // implementation 'org.webjars:bootstrap:5.1.0' // implementation 'org.webjars:font-awesome:5.15.3' // implementation 'org.webjars:popper.js:2.9.3' // implementation 'org.webjars:jquery:3.6.0' // implementation 'org.webjars:jquery-i18n-properties:1.10.2' // implementation 'org.webjars:momentjs:2.29.1' //-----------------------------------------------------------------------------------// } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } test { //exclude '**/*' useJUnitPlatform() }