부트 개념과 활용-02.의존성 관리 이해/응용
의존성 관리 이해
앞서 말했듯 기본적으로 의존성 관리를 부모 프로젝트로 설정해 줌으로써 해 준다. (spring-boot-starter-parent)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.3.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
spring-boot-starter-parent (부모 프로젝트)
공식문서 참고 : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-dependency-management
공식문서
- Java 1.8 as the default compiler level.
- UTF-8 source encoding.
- A Dependency Management section, inherited from the spring-boot-dependencies pom, that manages the versions of common dependencies. This dependency management lets you omit
tags for those dependencies when used in your own pom. - An execution of the repackage goal with a repackage execution id.
- Sensible resource filtering.
- Sensible plugin configuration (exec plugin, Git commit ID, and shade).
- Sensible resource filtering for application.properties and application.yml including profile-specific files (for example, application-dev.properties and application-dev.yml)
자바 기본 버전 설정(1.8), UTF-8, 리소스에 스프링 부트가 사용하는 프로퍼티나 yml파일들 포함시켜 준다거나,
플러그인 설정도 마찬가지로 스프링 부트에 최적화된 설정들을 잡아준다.
그런데 만약 우리 프로젝트는 우리만의 상속 구조가 있어서,
우리 프로젝트에 저 parent를 선언 못하는 경우라면?
그렇다면 우리만의 구조로 상속하는 그 프로젝트의 parent에 설정을 해 주면 된다.
그럼 우리 프로젝트
-> 우리가 상속받는 프로젝트
-> (spring-boot-starter-parent) 이렇게 들어가서 동일하게 의존성 관리를 받을 수 있다.
만약 부모가 고정되어 있어서 건드릴 수가 없다. 그렇다면 <dependencyManagement>
로 설정을 할 수 있지만,
모든게 다 되는 것은 아니고(parent와 다름) 추천하지는 않는다.
의존성 관리 응용
<!-- spring-boot-getting-started(부모)의 spring-boot-dependencies(부모) 로 들어가면
properties 설정 참고하여 여기서 재정의할 수 있다.-->
<properties>
<spring.version>5.0.6.RELEASE</spring.version>
</properties>
...
...
<!-- 스프링 부트가 관리하는 의존성 (버전 쓸 필요 없다)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 스프링 부트가 관리하지 않는 의존성 -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
인텔리J 옆에 아이콘이 뜨면 버전 관리를 해 주는 것인데, 이럴 경우 버전은 적을 필요 없다.