Maven의 경우
결론 : 의존성들도 부모-자식의 계층 구조로 이루어진다
- spring-boot-starter-web의 parent = spring-boot-starter-parent
- spring-boot-starter-parent의 parent = spring-boot-dependencies (최상위 의존성)
- 최상위 의존성의 <dependencies>에 스프링 부트에 포함되는 기본 의존성들이 정의
- 최상위 의존성의 <dependencyManagement>에 기본 의존성들의 버전 정보 정의
부모-자식 구조의 특징
- 상속 없이 의존성을 추가하고 싶다면 dependencyMangement에 spring-boot-starter-parent 추가
- 그러나 dependencyManagement는 오직 의존성 관리만 받을 수 있다
- 하지만 상속을 받는다면 <spring.version> / <java.version> / <maven.compiler.target> 등과 같은 properties 또한 상속받는다.
- 프로퍼티 상속 / 플러그인 설정 / 리소스 설정 등... 상속이 편리하다.
- 자식 의존성에서 부모의 요소를 오버라이딩할 수 있다.
- 스프링 부트가 관리하는 의존성 -> 버전 명시 필요 없음 (명시하면 오버라이딩 됨)
- 추가적으로 추가하는 의존성 -> 버전 명시 필요함
Gradle의 경우
- Multi-module 프로젝트에서만 부모-자식 구조를 사용한다.
- 따라서 maven처럼 부모-자식을 정의할 수 없다.
- 대신 플러그인 블럭을 정의하면 maven처럼 스프링 부트 스타터가 관리하는 의존성의 버전은 일일이 명시하지 않아도 된다.
- 관리받지 않는 의존성은 버전을 명시해주는게 좋다.
plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링부트의 AutoConfiguration을 이용한 Bean 등록 (0) | 2020.04.06 |
---|---|
[spring] 스프링부트의 Bean 등록 2단계 (0) | 2020.03.28 |
[spring] 스프링부트 프로젝트 초기 생성 및 구조 (gradle) (0) | 2020.03.23 |
[spring] 핵심3_Portable Service Abstraction (0) | 2020.03.22 |
[spring] 핵심2_Aspect Oriented Programming (0) | 2020.03.21 |
댓글