layout: post title: Gradle author: Bong5 categories: [Keywords, ProgramingLanguage/Java, WEB/Basic] —

Gradle


기존 스프링 프레임워크를 사용하면서 빌드 도구로써 메이븐을 사용했었다. 단순히 디펜던시 라이브러리를 자동으로 다운로드 해주는 기능으로만 사용했던 빌드도구(그레이들)에 대해 학습해 본다.


그레이들

그레이들은 Groovy 또는 Kotlin을 사용하는(정확하게는 DSL) 빌드도구 이다. 메이븐이 XML을 활용하여 빌드정보를 기술한다면 그레이들은 위와 같은 DSL을 활용하여 빌드 정보를 기술한다.

  • 유연한 언어
    • 그레이들의 가장 큰 특징 중 하나이다. 위에서 언급했던 바와 같이 그레이들은 제대로된 프로그래밍 언어를 사용하여 빌드를 기술하기 때문에 매우 유연하게 각종 처리를 수행할 수 있다.
  • Task로 처리
    • 그레이들은 태스크라는 개념을 사용하여 프로그램을 작성한다. 다양한 용도별로 태스크를 만들어서 그 안에 처리를 기술한다. 어떤 태스크를 만드느냐에 따라 실행되는 처리내용이 달라진다.
  • 메이븐 중앙 저장소 대응
    • 라이브러리 관리에 있어서 메이븐 중앙 저장소의 역할은 매우 강력하다. 그레이들에서는 메이븐 중앙 저장소를 지원하고 그렇기 때문에 중앙 저장소에 있는 라이브러리 모두 그대로 이용할 수 있다.
태스크 실행 명령어

그레이들 명령어로 자바 프로젝트를 생성 할 수 있다. 생성되는 프로젝트의 구조는 기존 메이븐의 구조를 따르는데 buildpath, classpath 등에 대한 경로도 메이븐의 구조를 따르는 것 같다.

위 사진과 같이 그레이들 명령어는 **gradle O O **와 같이 실행한다. 앞서 말한 것 과 같이 그레이들에서는 다양한 처리를 위해 Task 를 사용하는데 태스크란 실행할 처리를 모아놓는 단위로 그레이들에 처음부터 포함되어 있는 것(build, init 등)도 있고 프로그래머 자신이 작성할 수도 있다.(기존의 태스크에 기능을 추가 확장 할 수도 있다.) 이 태스크를 실행하는 것이 그레이들에서 빌드를 관리하는 기본적인 방법이다. 프로젝트를 컴파일하거나 실행하는 모든 처리에서 태스크를 사용한다.

프로젝트 구성
  • .gradle
    • Task로 생성된 파일 등을 보존
  • gradle
    • 기본적으로 그레이들 환경을 모아놓은 wrapper 파일이 존재.
  • src
    • 소스코드 관련 파일
  • build.gradle
    • 그레이들 빌드 파일(가장 중요)
  • gradlew, gradlew.bat
    • 그레이들 명령어 파일(gradle wrapper와 함께 동작, 설치 없이도 그레이들을 실행 할 수 있게끔 환경을 제공)
  • settings.gradle
    • 그레이들 설정 정보를 기술한 파일(maven에서 settings.xml과 동일)
build.gradle 확인

앞서 말했듯이 build.gradle은 빌드 내용이 기술된 파일이다. 이 파일에서 groovy나 kotlin DSL을 사용해서 실행할 처리를 작성해 나간다. settings.gradle은 빌드 설정 정보를 기술한 파일로써, 빌드를 실행하기 전 read되기 때문에 필요한 라이브러리를 읽는 등의 기술을 할 수 있다.

그레이들은 Groovy / Kotrlin의 DSL

그레이들은 ‘그루비 또는 코틀린’을 사용하는 빌드 도구이다. 위에서 계속 주의해서 언급했지만 정확하게는 그루비, 코틀린 그 자체가 아니라 DSL(Domain Specific Lang)이다.

DSL은 말 뜻 그대로 ‘도메인 고유 언어’ 로써 특정한 용도에 한정된 언어를 가리킨다. 기반 언어(groovy, kotlin)이 있지만 그 언어 자체는 아니고 특정한 용도(gradle 빌드도구)에 맞게 해당 언어를 기반으로 각색한 것으로 생각하면 된다.

그레이들은 태스크를 처리

그레이들은 기본적으로 태스크를 작성하여 처리한다. 태스크는 실행할 처리를 모아서 명령어로써 실행할 수 있다.

task name {
  ...실행할 처리...
}


doLast와 액션 리스트

스크립트 태스크를 살펴보면 doLast가 포함되어 있다. 이것은 일종의 ‘클로저’인데 태스크에 미리 준비된 doLast메서드에 처리하려는 내용을 전달한다.

태스크는 다양한 액션을 내부에 가지고 있다. 태스크를 실행하면 준비된 액션이 순서대로 실행되는데, 이 액션을 관리하는 것이 액션 리스트 이다. 액션은 어떤 역할을 하는지가 정해져있고 필요에 따라 액션에 처리를 추가해 태스크 조합이 가능하다.

액션 중에서도 doFirst와 doLast가 가장 많이 사용되는데 각각 ‘가장 처음에 실행되는 액션’과 ‘마지막에 실행되는 액션’이다. 이들을 사용하여 태스크의 처음과 마지막에 처리를 실행할 수 있다.

task hello {
  doLast{
    println("=====LAST====");
  }

  doFirst{
    println("=====First====");
  }
}

###참고 및 출처

  • 자바 프로젝트 필수 유틸리티