gradle이란? gradle 명령어 정리

devdo·2022년 11월 17일
0

TDD

목록 보기
6/6

Gradle 이란?

Groovy 기반의 오픈소스 빌드 도구

빌드 도구란?
소프트웨어 개발에 있어서 소스 코드를 실행 가능한 어플리케이션으로 만들어주는 도구를 말합니다.
빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 도는 빌드 자동화 도구라고 불리기도합니다.

대표적으로, ant, maven, 그리고 gradle 이 있다.

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

Gradle
build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하다는 장점을 갖습니다.
Gradle은 현재 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 있다고 합니다.


Gradle 특징

1) 간결한 스크립트

Gradle 이전의 빌드 도구인 Ant와 Maven은 XML 문법으로 스크립트를 작성하였습니다.
하지만 XML은 태그 문법 때문에 복잡한 빌드 스크립트를 작성하기에는 까다로우며 가독성또한 떨어집니다.
반면, Gradle은 Groovy 문법으로 간결한 스크립트를 작성할 수 있습니다.

2) 빌드 속도

가장 큰 이유. 빌드 속도가 빠름 (maven의 2배 이상, 최대 100배 빠르다)
프로젝트 규모가 커지게 되면 빌드 속도 차이가 개발 생산성에 큰 영향을 미치게 됩니다.
Gradle은 캐싱(caching)을 하기 때문에 Ant나 Maven같은 이전 빌드 도구보다 빌드 속도가 빠르다는 장점을 갖습니다.

3) 멀티 프로젝트 빌드

멀티 프로젝트 빌드 - 하나의 프로젝트 내 또다른 여러개의 하위 프로젝트를 구성할 수 있다.

대규모 자바 프로젝트는 대부분 하나의 프로젝트 안에 여러 모듈이 동시에 개발되고, 각 모듈이 공통으로 사용하는 모듈도 만들어지게 되는데
이렇게 여러 모듈이 동시에 개발되는 경우 각각 따로 빌드 작업을 하면 번거로울 뿐 아니라 실수가 발생할 수 도 있습니다.


Gradle Wrapper란

Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다. Wrapper는 미리 선언된 버전의 Gradle을 호출하고, 필요한 경우 미리 다운로드한다.

Java 프로젝트를 CLI 환경에서 빌드할 때 CLI 환경을 프로젝트 빌드 환경과 매번 맞춰줄 필요가 없는 이유가 바로 Gradle Wrapper를 사용하기 때문이다.

즉, 환경에 종속되지 않고 프로젝트를 빌드할 수 있는데 이런 점이 Gradle이 가진 강력한 특징중 하나이다.

gradle wrapper 명령어를 실행하면 아래처럼 파일들이 생성된다.

$ gradle wrapper

BUILD SUCCESSFUL in 545ms
1 actionable task: 1 executed

$ tree
.
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

2 directories, 4 files

Gradle Wrapper 구조

  • gradlew.bat
    윈도우용 wrapper 실행 스크립트이다.

  • gradlew
    유닉스용 wrapper 실행 스크립트이다. 컴파일, 빌드 등을 하는 경우 사용한다. ./gradlew {task} 형태로 실행한다.

  • gradle/wrapper/gradle-wrapper.jar
    Wrapper 파일이다. 실행 스크립트가 동작하면 Wrapper에 맞는 환경을 로컬 캐시에 다운로드 받은 뒤에 실제 명령에 해당하는 task를 실행한다.

  • gradle/wrapper/gradle-wrapper.properties
    Gradle Wrapper 설정파일이다.

gradle vs ./gradlew

gradle은 내장 Gradle이다.

내장 gradle을 직접 사용하기 위해서는 매우 복잡한 과정을 거쳐야 한다.


그래서 ./gradlew 을 사용한다!

gradlew는 Gradle Wrapper의 준말이다.

Gradle Wrapper은 gradle init시 생성되는 gradle/wrapper 폴더에 들어있으며, 이 내부에는 wrapping된 그레이들 jar인 gradle-wrapper.jar와 wrapping된 그레이들의 환경을 설정할 수 있는 gradle-wrapper.properties가 있다.

✅ gradlew와 gradle.bat을 사용한 내장 그레이들 사용하기

내장 그레이들의 사용을 간단하게 만들기 위해 만들어진 것이 바로 gradlew와 gradle.bat 스크립트이다.

  • gradlew는 맥, 리눅스용 스크립트이며,
  • gradle.bat은 윈도우용 스크립트이다.

gradlew와 gradle.bat 스크립트는 Gradle 명령어를 내장 그레이들을 이용해 실행하기 위한 환경설정부터 실행까지 모두 수행한다.

gradlew 내부를 보면 다양한 로직들이 들어있으며, 이 로직들은 내장 그레이들을 사용하기 위해 만들어진 스크립트이다.

$ gradle build

gradlew 를 이용하여 빌드하면 로컬 환경 java와 gradle 버전과 상관없이 새로운 프로젝트를 빌드할 수 있다.

$ ./gradlew build

명령어 정리

bootjar

💥 Test 코드 빌드 안함!
목적: Spring Boot 애플리케이션을 포함한 실행 가능한 JAR 파일을 생성합니다.

작업: bootjar는 Spring Boot의 종속성과 메타 정보를 포함하여 실행 가능한 JAR 파일을 생성합니다. 이 JAR 파일은 java -jar 명령어로 실행할 수 있습니다.

결과: build/libs 디렉토리에 실행 가능한 JAR 파일이 생성됩니다.

$ ./gradlew clean bootjar

build

gradle build
목적: 프로젝트의 전체 빌드를 수행합니다.

작업: build는 모든 테스트를 실행하고, 모든 소스 파일을 컴파일하고, 모든 종속성을 다운로드하고, 최종적으로 실행 가능한 JAR 파일을 생성합니다.

결과: build/libs 디렉토리에 실행 가능한 JAR 파일과 테스트 결과 등이 생성됩니다


명령어들

# application 컴파일
./gradlew compileJava
# application 클린 및 빌드 -> jar 생성
./gradlew clean build
# profile 파일 지정 하고 빌드하기
./gradlew -Dspring.profiles.active=dev clean build

or
# profile 파일 지정하고 실행하기
./gradlew -Dspring.profiles.active=dev bootRun
# 애플리케이션 띄우기 = 빌드 + jar 실행
./gradlew bootRun

# 동일한 명령어
./gradlew build && java -jar ./gate/build/libs/gate-spring-0.0.1-SNAPSHOT.jar
# 루트프로젝트 의존성 확인하기 
./gradlew -q dependencies

# 특정 하위프로젝트의 의존성 확인하기
./gradlew -q dependencies subproject:dependencies

Test

IntelliJ 내
test Gradle > verification > test

명령어로 테스트 돌리기

# 단위 테스트 돌리기
./gradlew (clean) test 
# 단위 테스트는 건너뛰고 빌드하기
./gradlew build -x test 
# 특정 하위프로젝트에 포함된 단위 테스트만 돌리기
./gradlew :subproject:test

# 특정 테스트 케이스만 돌리기
gradle test --tests *VerificationRepositoryTest*

profile
배운 것을 기록합니다.

0개의 댓글