본문 바로가기
Spring

[Spring] 스프링 부트 Gradle 의존성 관리 및 Plugin

by jaee_ 2021. 12. 22.

스프링 부트 Gradle 

Gradle 은 의존관계가 있는 라이브러리를 함께 다운로드 합니다.

 

예시로 살펴보도록 하겠습니다. 저는 프로젝트 생성시 의존성을 spring-boot-starter-thymeleaf 와 spring-boot-starter-web을 추가했습니다. 그래서 build.gradle을 보면 다음과 같이 의존성이 추가된 것을 볼 수 있습니다. 

build.gradle

 

하지만 저는 두 개의 의존성만 추가했는데 실제 추가된 라이브러리를 보니 다음과 같이 추가되어 있었습니다. 

추가된 라이브러리

어떻게 추가하지않은 다음과 같은 라이브러리들이 존재하는걸까요? 

맨 처음 언급했듯이 Gradle은 의존관계의 라이브러리를 함께 다운로드합니다. Gradle 목록을 클릭하여 한 번 살펴보겠습니다. 

Gradle

의존성을 추가하겠다고 명시했던 thymeleaf와 web이 추가되어있는 것을 확인할 수 있습니다. 저 의존성을 열어보면 해당 의존성을 추가하기위해서 필요한 라이브러리들이 계층적으로 나타나있는 것을 볼 수 있습니다. 

web 라이브러리를 다운로드 받기 위해 의존관계인 tomcat과 webmvc등을 땡겨오는 것을 볼 수 있습니다.

 


스프링 부트 Gradle Plugin

그렇다면 위의 캡쳐본에서 라이브러리 옆에 명시된 버전은 어떤 기준으로 다운로드 되는걸까요? 한 번 알아보겠습니다.

 

Gradle은 Java 코드를 컴파일하는 기능과 같은 모든 유용한 기능은 플러그인 에 의해 추가됩니다. 

 

우선 Plugin을 살펴보겠습니다. 

plugins {
   id 'org.springframework.boot' version '2.5.5'
   id 'io.spring.dependency-management' version '1.0.11.RELEASE'
   id 'java'
}

제가 직접 추가한 것이 아니지만 기본적으로 plugins가 적용이 되어있습니다. 이는 무엇을 의미하는지 알아보도록 하겠습니다. 

 

  • org.springframework.boot : 플러그인을 단독으로 적용하면 프로젝트는 아무런 변화가 없습니다. 대신 다른 플러그인이 적용되는 시점을 감지하고 그에 따라 반응합니다. 예를들면, java 플러그인이 적용되면 실행 가능한 jar 빌드 작업이 자동으로 구성됩니다.
  • io.spring.dependency-management : 이 플러그인을 적용하면 Spring Boot의 플러그인이 사용중인 Spring Boot 버전에서 Spring-boot-dependency bom을 자동으로 가져옵니다. 즉, Maven과 같은 종속성 관리 기능을 제공하는 Gradle 플러그인입니다. 이는 의존성을 추가할 때 버전을 생략할 수 있습니다. 

io.spring.dependency-management 플러그인에 의해 Spring Boot dependency에 있는 버전을 자동으로 가져와서 버전에 대한 생략이 가능하다고 합니다. 

 

실제 제가 예시로 만든 프로젝트의 build.gradle의 코드는 다음과 같습니다. 

plugins {
   id 'org.springframework.boot' version '2.5.5'
   id 'io.spring.dependency-management' version '1.0.11.RELEASE'
   id 'java'
}

group = 'me.whiteship'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
   mavenCentral()
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   runtimeOnly 'com.h2database:h2'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
   useJUnitPlatform()
}

정말 implementation을 보면 버전을 명시안해주었지만 다음과 같이 버전이 명시되어있는 것을 볼 수 있습니다. 

 

어떤 버전을 가져오는지 궁금하거나 사용할 라이브러리의 버전이 궁금하다면 공식 홈페이지에서 확인도 가능합니다. 

 

 

또는 github에서도 버전 확인이 가능합니다. 

 

확인하고자 하는 spring-boot 버전을 선택한 뒤 spring-boot-dependencies -> build.gradle 을 들어가면 확인이 가능합니다. 저는 2.5.5 버전이라 2.5.x 를 선택한 뒤 보았습니다. 

일부만 캡쳐를 했지만 정말 많은 라이브러리의 버전이 관리되고 있는 것을 확인할 수 있습니다. 

 


참고한 사이트

https://docs.gradle.org/current/userguide/plugins.html

https://plugins.gradle.org/plugin/org.springframework.boot

댓글