빌드툴 - Ant, Maven, Gradle

seungwon·2023년 6월 7일
0

국내 빌드툴 검색율!

전세계 빌드툴 검색율

빌드툴 : 빌드(소스코드->애플리케이션 생성) 자동화를 돕는 프로그램

  • 수동으로 하는 경우 : 무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않음
  • 라이브러리를 다운로드 및 추가하는 번거로움
  • 라이브러리의 버전을 쉽게 동기화

역사 : Make -> Ant -> Maven -> Gradle

Maven vs. Gradle

출처 : Gradle 공식문서

Gradle[그래들]

2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템

  • Groovy : JVM 상에서 실행되는 스크립트 언어
    Java와 유사한 문법 구조를 가지며, 호환성이 아주 좋다.

장점

  • 프로젝트를 설정 주입(Configuration Injection) 방식으로 정의
    • Maven 상속 구조보다 재사용에 용이
  • 멀티 프로젝트 빌드 가능 : 하나의 repository내에 여러개의 하위 프로젝트를 구성할 수 있음
  • 빌드 속도가 빠름
    • 점진적 빌드 : 마지막 빌드 호출이후에 변경이 있는 경우만 빌드
    • 빌드 캐시 : 빌드 결과물을 캐싱해 두었다가 하나의 빌드에서 사용된 파일들이 다른 빌드에서 사용된다면 다시 빌드 하지 않고 재사용
    • 데몬 프로세스 : 빌드 사이에 다음 빌드를 유지
      • 서비스의 요청에 응답하기 위해 오래 살아있는 프로세스
      • 메모리 상에 빌드 결과물을 보관 -> 한 번 빌드된 프로젝트는 다음 빌드시 매우 적은 시간 소요됨

구조

  • 프로젝트 구조 예시
    출처 : 링크
  • build.gradle : build script
    • gradle의 실행 단위 : task
    • 명령어
      • gradle init : 프로젝트 생성
      • gradle run : 실행
      • gradle bu ild : build
      • gradle {build.gradle에 정의된 task명} : task목록 확인
    • 자바 프로그램을 빌드하고 실행할 task는 이미 플러그인 형태로 추가됨
  • gradle.wrapper 디렉토리 : Gradle 환경
  • gradlew (맥/리눅스 : gradlew, 윈도우 : gradle.bat)
    • 프로젝트마다 Gradle 버전이 다른 경우 호환 문제가 발생할 수 있어 이를 방지하기 위해 내장 gradle을 사용
    • 내장 gradle(Gradle Wrapper) 사용을 간편하게 하기 위한 스크립트 파일
    • 사용 : ./gradlew {작업명} (mac), gradlew {작업명}(window)

build.gradle 파일

plugins{ // 플러그인들

}
..
repositories{
	// 의존 라이브러리들이 저장되어 있는 저장소 설정
}
..
dependencies{ // 의존성
	implementation 'org.springframework.....'
    
    testImplementation '....'
    
    runtimeOnly '.....'

}

의존성 (ex- B가 A에, C가 B에 의존하는 경우)

  • api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드
    • A(api) <- B <- C 의 경우 C 에서 A 를 접근할 수 있음
    • A 수정시 B 와 C 모두 재빌드
  • implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드
    • A(implementation) <- B <- C 의 경우 C 에서 A 를 접근할 수 없음
    • A 수정시 B 까지 재빌드
  • compileOnly : 컴파일에만 사용되는 의존성 정의
  • runtimeOnly : 런타임에만 사용되는 의존성 정의
  • test + Implementation/compileOnly/runtimeOnly : 테스트시에만 해당 의존성 정의

참고자료

0개의 댓글