Gradle 이란?

떡ol·2022년 8월 21일
0

Gradle 이란?

특징

  • Ant처럼 매우 유연한 범용 빌드 도구.
  • Maven과 같은 구조화 된 build프레임워크 (구조의 전환이 가능).
  • Maven, Ivy등의 기존 저장소 인프라 또는 pom.xml 파일과 ivy.xml 파일에 대한 migration의 편이성 제공
  • 멀티 프로젝트 빌드 지원.
  • 의존성 관리의 다양한 방법 제공
  • Build script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)을 사용
  • 기존 Build를 구성하기 위한 풍부한 도메인 모델 제공.
  • Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드 지원

장점

  • Ant, Maven과 같은 기존의 빌드툴은 xml형식을 이용하여 정적인 설정정보를 구성했다.
    Gradle은 Groovy라는 언어를 이용하여 코드로서 설정정보를 구성하기 때문에 구조적인 장점이 있다.
  • xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
  • 프로젝트를 설정주입방식으로 정의하기 때문에 maven의 상속 구조보다 재사용에 용이하다.



Build Lifecycle

Build 3단계 Gradle Build Lifecycle

초기화(Initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 Project 객체를 생성.
settings.gradle 파일에서 프로젝트 구성 (멀티프로젝트, 싱글프로젝트 구분)
구성(Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행. (프로젝트 객체 구성)
configured Task 실행
실행(Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상 결정.
gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 Task들을 실행

Build 설정파일

settings.gradle : 프로젝트 구성 설정.(싱글프로젝트의 경우 생략 가능)
Gradle은 멀티프로젝트를 구성하여 프로젝트간의 의존성 및 서브프로젝트, 교차 프로젝트를 구성할 수 있다. Gradle MultiProject
build.gradle : 빌드에 대한 모든 기능 정의.



사용법

build.gradle 파일에 빌드정보를 정의하여 프로젝트에서 사용하는 환경 설정, 빌드방법, 라이브러리 정보 등을 기술함으로서 빌드 및 프로젝트의 관리환경을 구성한다.


✔ plugin 설정

plugin은 미리 구성해 놓은 task들의 그룹이며, 특정 빌드과정에 필요한 기본정보를 포함하고, 필요에 따라 정보를 수정하여 목적에 맞게 사용할 수 있다.

plugins {
    id 'org.springframework.boot' version '2.3.0.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'war'
}
 
// project info
group = 'com.example'
// project version 
version = '0.0.1-SNAPSHOT'
// JDK version source compatibility 
sourceCompatibility = '1.8'
  • Java 프로젝트를 위해 정의한 'JAVA 플러그인'에서는 compileJava, classes, test, jar 등의 task를 제공한다.
  • Web 프로젝트를 위한 'WAR 플러그인'에서는 어플리케이션 소스를 war파일로 묶어주는 war task를 제공한다.

Gradle apply plugin과 plugins

//buildscript를 이용한 기존방식
buildscript {
    ext {
        springBootVersion = '2.1.7.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
//plugins만을 이용한 방식
plugins {
    id 'java'
    id 'eclipse'
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}

buildscript 와 apply plugin 부분을 plugins 블럭으로 간단하게 적용할 수 있다. (기존 것(buildscript)도 사용 가능)


✔ 저장소 설정

Gradle은 Maven repository, JCenter repository, Ivy directory 등 다양한 저장소를 지원한다.

repositories { 
    mavenLocal() // maven 로컬 캐시 저장소 
    mavenCentral() // maven 중앙 저장소 
    maven { url "http://repo.company.com/maven"  } // maven 원격 저장소 
}

repositories로 다운로드 받은 jar는 $USER_HOME/.gradle/caches/modules-2/files-2.1/ 경로에 캐시된다.


✔ 의존관계 설정

Gradle은 java의 의존성 관리를 위해 다양한 '구성'을 제공하고 있다.

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-web'
   providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
   testImplementation('org.springframework.boot:spring-boot-starter-test') {
       exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
   }
  • implementation : 프로젝트 컴파일 과정에서 필요한 라이브러리
  • providedCompile : compile시에는 필요하지만, 배포시에는 제외될 dependency를 설정한다.
    (war plugin이 설정된 경우에만 사용 가능하다)
  • providedRuntime : runtime시에만 필요하고, 실행환경에서 제공되는 dependency를 설정한다.
    (war plugin이 설정된 경우에만 사용 가능하다)
  • testImplementation : test 시에 필요한 dependency 관리.



(참고) Gradle이란 무엇인가??
(참고) Gradle apply plugin과 plugins

profile
하이

0개의 댓글