쉬운 프로그래밍

[Gradle] Gradle 간단 정리 본문

Programming/Gradle

[Gradle] Gradle 간단 정리

쉬운형 2022. 8. 15. 21:41

Gradle이란?

대부분의 소프트웨어에 유연하게 적용되도록 개발한 JVM 기반의 오픈소스 빌드 자동화 도구이다.

구체적 내용 및 장단점은 https://docs.gradle.org/current/userguide/what_is_gradle.html를 참고해보자. 


Gradle vs Maven?

나중에 작성하기


적용해보기

https://start.spring.io/ 에서 생성한 프로젝트의 build.gradle을 살펴보며 사용되는 configuration들에 대해 알아보자.

1. plugins

plugins {
    id 'java' 
}

위 코드는 JAVA 프로젝트를 빌드하기위한 task를 생성하는 java plugin을 적용한다.

만약 Spring Boot 프로젝트를 빌드해야 하는 경우에는 아래와 같은 코드를 블럭 안에 추가로 넣는다.

id 'org.springframework.boot' version '2.7.2'
id 'io.spring.dependency-management' version '1.0.12.RELEASE'

io.spring.dependency-management은 Spring Boot 버전에 따른 라이브러리들의 의존성을 관리해주는 플러그인이다.

dependencies configuration은 밑에서 설명하겠지만, 아래와 같이 Spring Boot 관련 의존성을 주입할 때 버전을 생략할 수 있도록 한다. 

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
   implementation 'org.springframework.boot:spring-boot-starter-web'
}

2. repositories

repositories {
	mavenCentral()
}

repositories는 외부 라이브러리에 대한 의존성을 어느 저장소(레퍼지토리)에서 받아올지 설정한다.

기본적으로 mavenCentral()을 많이 사용한다. 

최근에는 mavenCentral의 라이브러리 업데이트 난이도 이슈 때문에 jcenter도 사용한다고 한다.


3. dependencies

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   compileOnly 'org.projectlombok:lombok'
   developmentOnly 'org.springframework.boot:spring-boot-devtools'
   runtimeOnly 'mysql:mysql-connector-java'
   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencies 블럭은 프로젝트에서 필요한 라이브러리들의 의존성을 설정한다. 

3.1 implementation VS compile(api)

두 옵션 모두 외부 라이브러리에 대한 의존성을 주입하는 역할을 한다.

외부 라이브러리를 사용하는 A라는 모듈이 있다면,

  • implementation

A가 수정되는 경우 A만 재빌드된다.

  • compile

(B, C, D ....) 라는 모듈들이 A를 의존하고 있다면 A가 수정되는 경우 A를 의존하는 모듈 모두가 재빌드 된다. 

3.2 compileOnly

의존성이 컴파일시에는 요구되지만 런타임시에는 요구되지 않는 경우에 사용된다. 

위에서 작성된 < compileOnly 'org.projectlombok:lombok' > 을 예시로 들 수 있다.

compileOnly 'org.projectlombok:lombok'

롬복같은 경우에는 컴파일시에 @getter, @setter 등의 코드를 생성하고 이후에는 사용되지 않기 때문이다.

-> compileClassPath에만 넣어준다. 인텔리제이 우측 gradle탭에서 확인해보자.

3.3 runtimeOnly

compileOnly와 반대로 의존성이 컴파일시에는 요구되지 않지만 런타임시에는 요구되는 경우에 사용한다.

예시는 아래와 같다.

 runtimeOnly 'mysql:mysql-connector-java'

mySQL 커넥터는 컴파일시 전혀 필요하지 않고 실행 시점에만 필요하기 때문에 rutimeOnly 옵션을 사용한다.

-> runtimeClassPath에만 넣어준다. 인텔리제이 우측 gradle탭에서 확인해보자.

3.4 developmentOnly

의존성이 개발환경에서만 필요할 때 사용한다.

jar파일로 만들어 운영환경에 적용할 때는 해당 의존성이 제외된다. 

3.5 annotationProcessor

Annotation Processing은 자바 컴파일 옵션이다.

컴파일 단계에서 어노테이션으로 정의된 동작들을 스캔하고 처리하며 이를 통해 추가적인 파일의 생성 등을 가능하게 한다.

이러한 어노테이션들을 처리하는 것이 Annotation Processor이며,  annotationProcessor configuration을 통해 의존성을 주입받은 라이브러리를 Annotation Processor가 처리하도록 한다.

annotationProcessor 'org.projectlombok:lombok'

 


 

Comments