본문 바로가기
Tip & Tech/Tech

자동화 빌드 도구, Gradle 내용 정리

by 나비와꽃기린 2019. 12. 20.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

도서내용과 개인적으로 공부한 내용을 추가하여 정리합니다.

 

[gradle 정의]

gradle이란 "자동화빌드도구"로 프로그래밍 방식과 다양한 플러그인을 지원하는 하나의 빌드 플랫폼이다.

소스코드를 컴파일 하고 jar나 war 형태등으로 패키징해서 deploy 하는일을 자동화해주는 것이다.

 

[gradle 특징]

-gradle은 java6 이상이면 사용가능

-xml이 아닌 그루비로 작성되어 DSL(Domain-Specific Language)을 스크립트로 사용한다.

  *DSL이란? 특정 도메인에 특화된 프로그래밍 언어

-변수 선언, if else for 등의 로직으로 구현도 가능하다.

-병렬실행, 작업결과캐싱, 데몬프로세스재사용 등의 특징으로 빠른 빌드 속도를 제공한다.

-하나의 Repository로 여러 프로젝트를 구성하는 멀티프로젝트 구성이 가능하며

 상위 프로젝트의 의존성 및 설정을 하위 프로젝트에서 상속 받아 사용하는것도 가능하다.

-task를 만들거나 플러그인을 만들어 기능의 추가, 즉 확장성이 좋다

 *여기서 플러그인이란 java,웹 어플리케이션 등의 프로젝트를 구성하는데 사용. 플러그인의 종류로는

  java, docker, pmd, springboot등이 있음

 

 

[gradle 설치 방법]

-맥OS : #sudo brew install gradle

-리눅스(centOS, Fedora) : #sudo yum install gradle

 

[gradle 설정파일]

-build.gradle 빌드에 필요한 기본설정 파일

 

[gradle 초기화]

그래들이 초기화 될 때 settings.gradle과 build.gradle 파일을 통해 build.gradle에 있는 프로젝트의 정보를 수집.

settings.gradle 파일로 해당 프로젝트를 싱글프로젝트로 구성할 것인지 멀티프로젝트로 구성할 것인지에 대한 결정을 함. setting.gradle 파일이 없으면 상위 디렉토리에서 찾고, 거기에도 setting.gradle파일을 찾지 못한다면

그 빌드는 싱글 프로젝트로 인식되어 실행됨.

 

[build 초기화]

#gradle init -type basic

init 실행 시 자동으로 생성한 gradlew, gradlew.bat 파일을 github 같은 저장소에 공유하면

같은 프로젝트를 진행하고 있는 다른 사용자는 그래들을 설치하지 않고도 사용할 수 있다고 함.

즉 그래들을 설치하지 않은 다른 사용자가 'gradlew'을 입력하면 그래들을 자동으로 내려받아 gradle을 실행한다고 함.

 

[gradle 저장소 설정]

그래들에서는 외부 저장소를 설정할 수 있음.

일반적으로는 maven url을 적지만 로컬저장소로 url을 변경하여 사용할 수 있음.

 

[gradle clean]

build 디렉토리는 반복해서 파일이 생성되는 디렉토리이기 때문에, 이전에 생성된 파일과

중복되지 않도록 파일을 삭제한 후 컴파일 해야하는 경우 #clean task 명령어를 통해 빌드결과물이 생성되는

디렉토리 내용을 한번 싹 지우고 새로 빌드할 수 있음.

 

 

[gradle 명령어 정리]

#gradle build

#gradle clean

#gradle run

#gradle jar - jar로 배보할 때

#gradle distZip -- zip이나 tar로 배포할 때

#gradle build -Pprofile=env -- profile을 통해 환경에 따라 다르게 build


 

ex) build.gradle 파일 예

group 'com.web'
version '1.0-SNAPSHOT'

apply plugin: 'java' /*자바 플러그인 추가*/
apply plugin: 'war'
apply from: 'tasks.gradle'

sourceCompatibility = 1.7

/* compile설정 */
compileJava {
    options.fork = true
    options.forkOptions.executable = 'javac'
    options.compilerArgs << "-XDignore.symbol.file"
    options.encoding = 'UTF-8'
}

project.webAppDirName = 'WebContent'
ext.profile = (!project.hasProperty('profile') || !profile) ? 'dev' : profile

/* 디렉터리 설정 */
sourceSets {
    main {
        java {
            srcDirs 'src'
        }
        resources {
            srcDirs 'src', "src/resources/${profile}"
        }
    }
}

repositories{
    maven{
        url "maven url"
    }
}

dependencies {
   ...dependency lib 기술...
}

 

ex) 계층 레벨의 멀티 프로젝트 생성 방법

*루트 디렉터리

  ㄴ 프로젝트1

  ㄴ 프로젝트2 와 같은 형태

 

계층관계이므로 settings.gradle 파일을 루트 디렉터리에서 작성한다. 해당 디렉터리가 멀티 프로젝트의 루트 디렉터리가 됨.

include 'back-end-project' , 'front-end-project'
rootProject.name = 'gradle-project'

 

 

 

 

출처 : "엔터프라이즈 빌드 자동화를 위한 Gradle" 도서 ( 한빛미디어 )