본문 바로가기
학습/Spring

[spring] 스프링부트 프로젝트 초기 세팅 시 빌드 툴의 이해 (maven, gradle)

by KKambi 2020. 3. 25.

Maven의 경우

결론 : 의존성들도 부모-자식의 계층 구조로 이루어진다

  1. spring-boot-starter-web의 parent = spring-boot-starter-parent
  2. spring-boot-starter-parent의 parent = spring-boot-dependencies (최상위 의존성)
  3. 최상위 의존성의 <dependencies>에 스프링 부트에 포함되는 기본 의존성들이 정의
  4. 최상위 의존성의 <dependencyManagement>에 기본 의존성들의 버전 정보 정의

 

부모-자식 구조의 특징

  1. 상속 없이 의존성을 추가하고 싶다면 dependencyMangement에 spring-boot-starter-parent 추가
  2. 그러나 dependencyManagement는 오직 의존성 관리만 받을 수 있다
  3. 하지만 상속을 받는다면 <spring.version> / <java.version> / <maven.compiler.target> 등과 같은 properties 또한 상속받는다.
  4. 프로퍼티 상속 / 플러그인 설정 / 리소스 설정 등... 상속이 편리하다.
  5. 자식 의존성에서 부모의 요소를 오버라이딩할 수 있다.
  6. 스프링 부트가 관리하는 의존성 -> 버전 명시 필요 없음 (명시하면 오버라이딩 됨)
  7. 추가적으로 추가하는 의존성 -> 버전 명시 필요함

 

Gradle의 경우

  1. Multi-module 프로젝트에서만 부모-자식 구조를 사용한다.
  2. 따라서 maven처럼 부모-자식을 정의할 수 없다.
  3. 대신 플러그인 블럭을 정의하면 maven처럼 스프링 부트 스타터가 관리하는 의존성의 버전은 일일이 명시하지 않아도 된다.
  4. 관리받지 않는 의존성은 버전을 명시해주는게 좋다.
plugins {
	id 'org.springframework.boot' version '2.2.5.RELEASE'
	id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}

 

댓글