그래들 ( Gradle ) 에 대한 학습 - Gradle 구조 및 Gradle Wrapper

그래들 ( Gradle ) 빌드 도구 (혹은 빌드 툴)에 대한 학습을 통해서 gradle에 대해 알아보았다면, gradle을 실전에서 사용하기 위한 gradle 구조 및 gradle이 설치되어있지 않은 환경에서 실행하게 해주는 Gradle Wrapper에 대해 학습한다. gradle이 무엇인지 궁금하다면 아래 링크를 참고한다.

 

그래들 ( Gradle ) 에 대한 학습 - 그래들이란? / What is Gradle?

학부생시절, 메이븐 빌드툴을 이용해서 자바프로젝트를 진행했던 희미한 기억이 있다. 그런데 현 직장에서 처음 맡은 프로젝트가 그래들 (gradle) 구성으로 이루어진 프로젝트. 때문에 그래들에

min-nine.tistory.com


그래들 ( Gradle ) 디렉터리 기본 구조

Build.gradle

  • Gradle의 기본 빌드 파일로써 이 파일에 프로젝트의 빌드에 대한 전반적인 내용을 명시해준다.

gradle/wrapper

  • gradle.wrapper.jar
    • gradle wrapper 파일로 gradlew 명령어로 프로젝트를 빌드할 때, 이 파일을 참조하여 설정 파일을 구성하기 때문에 gradle이 설치된 환경에서 실행하는 gradle build명령어와는 다르게 새로운 환경에 대한 영향이 없다.
    • 실행 스크립트가 동작하면 wrapper에 맞는 환경을 로컬 캐시에 다운로드한 뒤에 실제 명령에 해당하는 task를 실행한다.
  • gradle-wrapper.properties
    • gradle wrapper를 설정하는 설정 파일이다.

gradlew

  • Unix용의 실행 스크립트 파일이다.
  • 컴파일, 빌드 등을 하는 경우 사용하며 [./gradlew {tast}] 형태로 실행한다.

gradlew.bat

  • Windows용 실행 스크립트 파일이다.

settings.gradle

  • 프로젝트의 설정 정보 파일로써 멀티 프로젝트를 구성할 때, 하위 프로젝트들과의 관계를 이 파일에 작성하고 명시된 정보를 기준으로 프로젝트를 생성하게 된다.

 

Gradle Wrapper의 개념 및 사용방법

Gradle 명령어를 사용하려면 로컬 환경 혹은 서버 환경에 Gradle이 설치되어 있어야 한다. 기존 프로젝트를 빌드할 때는 자바 버전을 맞춰야 하는 경우도 생기기 마련이다. 그런 상황을 방지하고자 Gradle Wrapper라는 것이 존재한다. Gradle Wrapper를 사용하면 서버 환경에 일일이 Gradle을 설치하거나 Java버전을 프로젝트마다 바꿔줘야 하는 번거로움 없이 프로젝트를 빌드할 수 있게 된다.

 

Gradle이 설치되어있지 않아도 Gradle Task를 실행할 수 있도록 도움을 주기 때문에, 이를 통하여 빌드하게 되면 프로젝트와 동일한 버전의 Gradle을 사용할 수 있게 된다. 때문에 Gradle Wrapper의 사용을 권장하는 추세이다.

 

아래 프로젝트를 예시로 설명해보자. 1개의 Gradle 프로젝트를 gradle build 명령어를 사용하여 빌드하면, 기본적으로 명령어를 실행한 서버 혹은 로컬 환경에 설치된 gradle을 사용하며, 같은 환경에 설치되어있는 java 버전을 사용하기 때문에 아래와 같은 에러가 발생할 수 있다.

# 프로젝트 빌드
$ gradle build

BUILD SUCCESSFUL in 625ms
1 actionable tasks: 1 up-to-date

# jar 파일 실행
$ java -jar build/libs/temp.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError:
  temp/App has been compiled by a more recent version of the Java Runtime (class file version 57.0),
  this version of the Java Runtime only recognizes class file versions up to 52.0

"Error: A JNI error has occurred, please check your installation" 이 에러는 현재 Java Runtime이 실행 가능한 버전보다 높은 버전으로 컴파일해서 발생하는 에러임으로 이런 에러를 해결하기 위해 일일이 환경변수 설정을 통해서 Java Runtime이 실행할 수 있는 java 버전으로 바꾸어 줘야 하는 번거로움이 발생한다. 이번에는 아래와 같이 gradle wrapper를 사용하여 빌드를 실행해 본다.

# 프로젝트 빌드
$ ./gradlew build

BUILD SUCCESSFUL in 1s
1 actionable tasks: 1 executed, 1 up-to-date

# jar 파일 실행
$ java -jar build/libs/temp.jar

HELLOW MINGYU WORLD!

실행 결과, 프로젝트 버전과 서버 혹은 로컬 환경의 java버전이 다를 때 발생하는 에러 혹은 이슈들을 해결할 수 있게 된다. 이를 포함한 여러 가지 이슈가 있고, 그것을 보다 쉽게 핸들링하고자 gradle wrapper를 사용하는 것을 권장하고 있다.