Gradle
✅ JAVA build, build tool
✔️ java application 구현 및 실행 준비
☝🏻java application을 만들 때 비즈니즈 핵심 로직, 중요 클래스는 직접 구현
✌🏻 동시에 외부 클래스, 인터페이스 등 JAVA library 활용
🤞🏻 코드가 잘 실행되는지 검증
👌🏻 JAVA 외부 library 종속성 관리, library끼리 꼬이지 않도록(왜냐하면 library끼리 서로를 참조하기 때문)
👍🏻 JAR 이라는 압축 파일로 패키징하여 실행 준비 끝!
✔️ JAVA build
구현 + 실행할 수 있는 상태로 만들기
JAVA build 🟰 JAVA compile 과정 ➕ 기타 작업
- java compile
= java dependency management - java test
- java assemply
✔️ JAVA build tool
매번 정형화된 build 작업을 자동화해주는 시스템
- make
- ant: java에 특화된 빌드 툴
- maven: pom.xml에 maven설정
- gradle: build.gradle에 gradle설정이 되어 있음
🔖 정형화된 빌드 작업 리스트
- JAVA compile
- 코드 의존성 관리
- 코드 테스트 및 리포트
- 문서화 작업
- 압축화 파일(.jar) 생성
- 배포 과정 진행
✅ JAVA Gradle 프로젝트 구조
- Project: 코드, 파일을 묶는 최상위 작업 단위
Project안에 Module, gradle, src 다 있음 - Module: 코드, 파일을 묶는 작업 단위
Module 단위로 build system 이 있음. - ./gradle: **gradle 명령 **파일 모음(wrapper)
- ./src: 기타 파일 모으는 폴더
여기안에 우리가 코드 작성
/main 패키지, Main.java가 여기 들었음
/test 패키지도 있음 - /main 패키지: java 실행 코드, 파일 패키지
이 안에 resourse, org.exmaple, Main.java 들어 있다. - resourse: 실행, 테스트 할 때 사용되는 java외 파일
.csv, png, json… - org.exmaple: java group 패키지
- Main.java: 실행 클래스
- /test 패키지: 테스트 코드, 파일 패키지
✅ JAVA Gradle Tasks
통합 Task: Task가 어떤 Task에 종속
앞의 작업이 이루어져야 그 다음 작업이 이루어지고
앞의 작업이 실패하면 뒤에 작업 이루어지지 않음
단일 Task: 오로지 한 개의 Task
그림에서 clean
✅ JAVA Gradle DSL: Domain Specific Languages
build.gradle같은 파일
- Plugins: gradle 추가 기능 관리
task 관리 - group: version: java 모듈 메타 정보
- repository: java 외부 라이브러리 저장소
mavenCentral()이라는 곳에서 외부 라이브러리 들고 온다. - dependencies: 사용할 외부 java 라이브러리 관리
- Gradle Task 설정: gradle task custom 설정
test{} 라는 곳에 쓴다.
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
32
33
34
35
36
37
38
39
40
plugins {
id 'java'
//⭐️ gradle Task 같은 gradle 기능 추가
//plugin: task를 관리
id 'maven-publish'
}
group = 'org.example'
version = '1.0-SNAPSHOT'
//⭐️ gradle 변수 선언
//아래 사용해보았음
var jUnitVersion= "5.9.1"
repositories {
mavenCentral()
}
dependencies {
testImplementation platform("org.junit:junit-bom:${jUnitVersion}")
//testImplementation platform("org.junit:junit-bom:5.9.1")
testImplementation 'org.junit.jupiter:junit-jupiter'
//⭐️ dependencies 추가
//external libraries라는 파일에 추가된다.
// maven repository 라는 사이트에서 들고 온다.
// https://mvnrepository.com/artifact/com.google.guava/guava
implementation 'com.google.guava:guava:32.1.2-jre'
}
//⭐️ task custom 설정
//jar, classes 등 option 추가 가능
javadoc{
//javadoc만들 때 이 파일은 만들지 마. 제외해
//파일의 source root가져와서 붙이기
exclude('org/example/Main.java');
}
test {
useJUnitPlatform()
}
❓ java 라이브러리는 어디에서 들고 오는가?
maven repository 라는 사이트에서 들고 온다.
https://mvnrepository.com/
☑️ JAVA Gradle 사용해서 application 개선하기
- 기존 코드 정상적으로 실행되는지 확인
- 비효율적인 상황이 발생한다면
- 구글링으로 해결책(라이브러리) 찾기
- 라이브러리 종속성 추가
- 실제 코드에 라이브러리 사용해서 반영
- 정상 코드 빌드 동작 확인
personDTO 라는 객체를 Person으로 바꾸고 싶은데,
두 객체의 field가
personDTO는 name이라고 하고 Person은 fullname이라고 하고
personDTO는 age이라고 하고 Person은 years이라고 하는 상황이다.
이를 어떻게 name은 fullname이고 age는 years라고 알려줄 수 있을까?
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
32
33
34
35
36
37
38
39
40
//✅ build.gradle
//build.gradle에 dependencies 추가
// plugins {
// id 'java'
// }
// group = 'org.example'
// version = '1.0-SNAPSHOT'
// repositories {
// mavenCentral()
// }
dependencies {
testImplementation platform("org.junit:junit-bom:5.9.1")
testImplementation 'org.junit.jupiter:junit-jupiter'
//⭐️ dependencies 추가
//객체 간 mapping을 위해 MapStruct core, processor추가
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
}
// test {
// useJUnitPlatform()
// }
//✅ PersonMapStruct interface에 매핑
@Mapper
public interface PersonMapStruct {
//💡 동작원리: 싱글톤 디자인 패턴
PersonMapStruct INSTANCE= Mappers.getMapper(PersonMapStruct.class);
//💡 동작원리: 메타 프로그래밍
@Mapping(source= "name", target= "fullName");
@Mapping(source= "age", target= "years");
Person personDTOtoPerson(PersonDTO personDTO);
}
//✅ main.java
Person person= PersonMapStruct.INSTANCE.personDTOtoPerson(personDTO);
This post is licensed under CC BY 4.0 by the author.