빌드 도구 ( Build Tool ) :
。프로젝트의 빌드 / 의존성 관리 / 테스트 자동화 도구
。개발자의 소스코드를 실행 가능한 Application으로 빌드하는 역할을 수행.
▶ 각 프로그래밍 언어에 맞는 Project를 빌드 및 Dependency를 관리
Maven :
。XML Script 기반으로 pom.xml을 이용해 자동으로 library 와 dependency를 관리.
。Maven clean , install
view - Tool Windows - Maven - 프로젝트명 - Lifecycle - clean 우클릭 - Run Maven Build
Gradle :
。프로젝트 전체를 관리하는 Maven 이후 출시한 Groovy 기반 Java , Kotlin 등의 빌드 자동화 도구
。build.gradle를 통해 작성하여 dependency를 관리.
。gradle은 작업을 task / job ( 큰 단위 / 작은 단위 )로 구분하여 작업을 수행
。컴파일 / 의존성 다운로드 / JAR파일 생성의 역할을 수행
。gradle에 의해 빌드를 수행하는 경우 src/test 내 테스트 파일을 우선적으로 구동하여 테스트후 src/main 내 .java를 패키징하여 빌드
▶ 빌드파일에서 src/test는 제외
IDE를 통해 Java 어플리케이션을 구동하는 원리?
。JAVA의 컴파일 시 gradle에 의해 javac를 호출해서 전체 .java를 .class로 컴파일을 수행 후 실행

。 build 디렉토리 내 .class 파일로 컴파일되며 향후 어플리케이션 실행 시 해당 파일을 기반으로 실행됨
▶ gradlew clean build를 통해 제거가 가능하며, 제거 후 실행 시 다시 컴파일을 수행
어플리케이션 실행 시 테스트파일에 대해 gradle이 작성한 테스트결과를 확인하는 방법
。gradle은 빌드 전 src/test의 테스트 파일의 구동을 선행적으로 수행
▶ 수행한 테스트 결과를 다음에 작성
。build - reports - tests - test - index.html에서 gradle이 작성한 테스트 결과를 확인 가능


gradlew : gradle에게 명령을 전달
gradlew build war : WAR파일 빌드
gradlew build clean : 빌드파일을 삭제
。 gradle은 캐싱을 통해 빌드파일을 재활용하여 실행하므로, 빌드파일에 오류 발생 시 빌드파일 삭제 후 다시 생성
build.gradle :
。Gradle을 사용하는 Project의 Build Script 파일로서 dependency , Compile , Plug-in , Test의 관리 및 설정이 가능.
▶ Project의 build, test, production을 자동화하는 역할을 수행.
。Groovy , Kotlin으로 작성가능.
▶ XML 기반 Build Script에 비해 관리가 용이.

build.gradle 파일 주요 구성요소
plugins { id 'plugin이름' }
。본 프로젝트에 활용한 Gradle Plugin을 정의하는 코드 블록
Gradle Plugin 종류
。java : java project 용
。java-library : java library 용
。application : 실행 가능한 Application
。kotlin : Kotlin Project 용
。com.android.application : Android App Project 용
。war : WAR 파일 생성 시 선언
group , version :
。Project의 그룹명과 Version을 정의.
▶ 빌드 도구에서 Packaging 시 활용하는 메타데이터
。group = "패키지명" : 도메인을 거꾸로 기술하여 그룹명을 정의
▶ com.회사명.프로젝트명.루트
。version = "버전명" : 프로젝트의 버전을 정의
▶ 이후 JAR 빌드 시 JAR 파일명에 반영됨
repositories { }
。Project에서 사용할 Dependency 저장소를 지정.
▶ 일반적으로 Maven Central ( Maven 중앙 저장소 : mavenCentral() ) , JitPack 등을 정의
dependencies { 스코프 '라이브러리 주소' }
。Project에서 사용할 외부 라이브러리의 의존성을 정의.
▶ MavenRepository에서 필요한 라이브러리를 찾아서 정의
。Maven Repository : Java 모듈 / 라이브러리를 업로드 및 다운로드하는 저장소
。의존성 라이브러리는 패키지 내 External Libraries에 설치됨
Scope 키워드
。implementation : 라이브러리를 Compile + Runtime시 둘다 사용하도록 선언
。complieOnly : 라이브러리를 Compile 시에만 사용하도록 선언
。runtimeOnly : 라이브러리를 Runtime 시에만 사용하도록 선언
。testImplementation : 라이브러리를 Test 시에만 사용하도록 선언
。annotationProcessor : Annotation Processing 용 라이브러리 사용 시 선언
application { mainClass = '메인클래스' }
。Application의 Main Class 지정 시 사용.
▶ 해당 설정을 지정 시 gradle run 명령어로 Application 실행이 가능.
gradle 명령어
./gradlew test :
。src/test에 존재하는 테스트 코드를 실행
./gradlew build
。빌드하여 JAR 파일을 생성
./gradlew clean build
。테스트코드를 수행 및 통과한 경우 기존 JAR 파일을 삭제 후 빌드하여 JAR파일을 재생성