일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- React
- 에스가든스냅
- Request
- 상속
- 대전본식영상
- intellij
- error
- mac
- 라도무스dvd
- scanner
- c#코딩의기술실전편
- ORM
- 명시적외래키
- 코드프로그래머스
- EFCore
- lazy loading
- dbContext
- LINQ
- 스냅잘찍음
- extjs
- Store
- minimalAPI
- ViewModel
- .net
- JavaScript
- vscode
- JSON
- Config
- c#
- extraParams
- Today
- Total
ejyoo's 개발 노트
[Spring Boot 3.1.4] build.gradle 에 대한 정리 본문
본 글은 spring boot 기반의 Java 프로젝트를 처음 접하면서
build.gradle라는 파일에 들어가는 Gradle 빌드 스크립트에 대해서 정리하였다
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
}
repositories {
mavenCentral() // 중앙 Maven 저장소 사용 지시 (Maven Central Repository)
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// QueryDSL Implementation
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
test {
useJUnitPlatform()
}
/**
* QueryDSL Build Options
*/
def querydslDir = "src/main/generated"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
플러그인 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
}
- id 'java' : Java 프로젝트를 위한 기본 Gradle 플러그인
- id 'org.springframework.boot' : Spring Boot의 Gradle 플러그인. Spring Boot 프로젝트의 생성, 실행 등을 지원
- id 'io.spring.dependency-management' : Spring 프로젝트의 의존성 버전을 자동으로 관리해주는 플러그인
저장소 설정
repositories {
mavenCentral()
}
- mavenCentral() : 중앙 Maven 저장소를 사용하여 의존성을 획득
프로젝트 메타데이터 설정
group = 'com.ejyooshop'
version = '0.0.1-SNAPSHOT'
Java 버전 설정
프로젝트가 Java 17 버전과 호환된다는 설정
java {
sourceCompatibility = '17'
}
의존성 추가1
- 주요 Spring Boot 스타터 관련 의존성, Lombok, H2 데이터 베이스, MySQL 커넥터 포함
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
의존성 추가2
QueryDSL 을 사용하기 위한 의존성 설정 부분
QueryDSL : JPA 엔터티를 기반으로 타입 세이프한 쿼리를 작성할 수 있게 하는 프레임워크
dependencies {
// QueryDSL Implementation
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
com.querydsl:querydsl-jpa:5.0.0:jakarta
― QueryDSL 의 JPA 모듈을 위한 의존성
― Jakarta 는 Jakarta Persistence (JPA 2.2 이후의 버전)를 의미함. 이는 Java EE의 JPA 스펙과의 차이점을 나타내기 위함.
com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta
― APT (Annotaion Processing Tool) 모듈을 위한 의존성.
― APT 는 Annotaion을 기반으로 코드를 생성하기 위한 도구임.
― QueryDSL은 APT를 사용하여 JPA 엔터티에 기반한 Q-클래스를 생성함.
― Q-클래스는 QueryDSL 쿼리를 작성할 때 사용되는 타입 세이프한 클래스임.
― Gradle의 dependencyManagement 플러그인에서 가져온 QueryDSL 버전을 나타냄. 실제로 querydsl.version은 특정 QueryDSL 버전 문자열로 치환될 예정임.
jakarta.annotation:jakarta.annotaion-api
― jakarta Annotaions API 에 대한 의존성임.
― Java의 기본 Annotaion들 (ex: @Override, @Deprecated 등) 이외의 추가적인 Annotaion을 제공
jakarta.persistence:jakarta.persistence-api
― Jakarta Persistence (JPA) API에 대한 의존성임.
― QueryDSL은 이 API를 사용하여 엔터티와 상호 작용을 구성함.
annotationProcessor
― 빌드 시간에 코드 생성 / 코드 검사 작업 수행하기 위해 사용
― 위의 코드에서는 QueryDSL의 Q-클래스를 생성하기 위해 해당 의존성들이 Annotaion Processor로 지정됨.
애노테이션 프로세서 구성
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
― Gradle에서 configurations 블록은 프로젝트의 의존성 그룹 (의존성 설정) 을 정의하고 구성하는데 사용
- compileOnly
― 프로젝트의 컴파일 시간에만 필요한 의존성을 나타냄 (런타임에서는 미포함)
― ex) Lombok : 소스코드 컴파일 시 Annotaion을 기반으로 코드 생성 / 런타임에는 이러한 추가 코드가 필요하지 않음.
- extendsFrom
― compileOnly가 다른 의존성인 annotaionProcessor로 부터 의존성을 상속받도록 함.
― annotaionProcessor 는 APT 를 위한 의존성을 나타냄. 이 설정을 통해 QueryDSL, Lomebok 과 같은 Annotaion Processor의 의존성을 정의할 수 있음.
― compileOnly 의존성 그룹에 annotaionProcessor의 의존성을 포함시키는 코드.
― Annotaion Processor를 컴파일 시간에만 사용할 수 있게 됨, 이 의존성들은 최종 생성된 아티팩트(JAR 파일)에는 포함하지 않음.
테스트 설정
JUnit 5를 사용하도록 Gradle에 지시
test {
useJUnitPlatform()
}
― Gradle 빌드 스크립트 내에서 test 작업의 행동을 구성 / Gradle의 기본적인 작업
― 프로젝트 내의 테스트 코드를 실행하는데 사용
― Java 프로젝트에서 JUnit 또는 TestNG와 같은 테스트 프레임워크를 사용하여 테스트 코드를 작성하고 실행
― useJUnitPlatform() : 'test' 작업이 JUnit5을 사용하여 테스트를 실행하도록 구성. (JUnit Jupiter 테스트 엔진 사용)
QueryDSL 빌드 옵션
QueryDSL 코드 생성에 필요한 Gradle 설정
QueryDSL 은 JPA 엔터티를 기반으로 type safe한 쿼리를 작성할 수 있도록 도움을 주는 프레임워크
아래의 코드는
Q-클래스를 생성하기위한 디렉터리를 정의하고
해당 디렉터리를 Java 소스 디렉터리로 추가하며
Q-클래스를 생성할 위치를 설정하고
빌드 출력을 정리할 때 생성된 Q-클래스를 삭제하도록 구성됨.
def querydslDir = "src/main/generated"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
- def querydslDir = "src/main/generated
querydslDir 변수는 QueryDSL에 의해 생성된 코드(Q-클래스)가 저장될 디렉터리의 경로를 정의.
- sourceSets 설정
sourceSets은 프로젝트의 소스코드와 리소스를 어디서 가져올지 구성함
main 소스 세트의 java 소스 디렉터리에 querydslDir을 추가하도록 설정함. Gradle은 이 디렉터리에 있는 QueryDSL로 생성된 Q-클래스를 일반 Java클래스처럼 컴파일함.
- tasks.withType(JavaCompile)
모든 JavaCompile 유형의 작업 (Java 소스코드를 컴파일하는 작업)에 대해 코드 생성 디렉터리를 querydslDir 로 설정함.
QueryDSL 의 Annotaion Processor 가 Q-클래스를 생성할 때 해당 디렉터리에 파일을 출력
- clean.doLast 설정
빌드 출력을 정리하는 기본 Gradle 작업임
clean 작업이 실행된 후 querydslDir 디렉터리를 삭제하도록 추가적인 작업을 정의함. (빌드를 깔끔하게 정리하기 위함)
'BackEnd > Spring Boot' 카테고리의 다른 글
[Mac/IntelliJ/Gradle/Spring Boot 3.1.4] 자동빌드 설정 (SpringBoot - devTools) (0) | 2023.10.01 |
---|---|
[SpringBoot][Mac][인텔리제이] Hello world 출력하기 (0) | 2023.09.23 |
[Mac][인텔리제이] 단축키 (0) | 2023.09.23 |
[VSCode][Mac] Maven 설정 (0) | 2023.09.18 |