- spring-boot-starter-parent 와 spring-boot-dependencies2023년 08월 15일
- 알쓸개잡
- 작성자
- 2023.08.15.:48
Spring Boot는 최소한의 구성 작업으로 프로덕션에 바로 사용할 수 있는 Spring 애플리케이션을 빌드하는 프로세스를 간소화하도록 설계되었다. 이를 위해 Spring Boot 기반 애플리케이션에 대한 기본 구성 및 종속성을 제공하는 특별한 상위 프로젝트인 spring-boot-starter-parent 가 만들어졌다.
spring-boot-starter-parent 에 지정된 종속성을 통해서 기본적으로 제공되는 여러 종속성들을 간편하게 사용할 수 있다.spring-boot-starter-parent 관련 내용은 아래 링크에서 확인해 볼 수 있다.
Maven Central: org.springframework.boot:spring-boot-starter-parent:3.1.2
Discover spring-boot-starter-parent in the org.springframework.boot namespace. Explore metadata, contributors, the Maven POM file, and more.
central.sonatype.com
spring-boot-starter-parent 종속성
작성 시점 기준 버전은 3.1.2 이다.
Spring Boot 프로젝트를 생성할 때 spring-boot-starter-parent 를 프로젝트의 pom.xml 혹은 build.gradle 의 부모로 사용한다. spring-boot-starter-parent 를 추가한 후 프로젝트는 spring-boot-starter-parent 에 지정된 기본 빌드, 종속성 및 구성을 상속하므로 수동으로 지정할 필요가 없다.
출처:https://howtodoinjava.com/spring-boot2/spring-boot-starter-parent-dependency/ spring-boot-starter-parent의 pom 내용은 아래 링크에서 확인할 수 있다.
spring-boot-starter-parent 의 버전목록은 아래 링크에서 확인할 수 있다.
개발 중인 spring boot 프로젝트에 spring-boot-starter-parent는 아래와 같이 지정한다.
maven (pom.xml)
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.2</version> <relativePath/> <!-- lookup parent from repository --> </parent>
gradle (build.gradle)
plugins { id 'java' id 'org.springframework.boot' version '3.1.2' id 'io.spring.dependency-management' version '1.1.2' } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
spring-boot-starter-parent pom 살펴보기
spring-boot-starter-parent pom 파일의 주요 내용
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.1.2</version> </parent>
spring-boot-dependencies를 상속받고 있다.
<properties> <java.version>17</java.version> <resource.delimiter>@</resource.delimiter> <maven.compiler.release>${java.version}</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
프로젝트의 기본 속성을 정의하고 있다.
java 버전은 17을 사용하고 인코딩은 UTF-8을 사용하도록 설정하고 있다.
spring-boot-dependencies pom 살펴보기
spring-boot-starter-parent에서는 spring-boot-dependencies를 상속받고 있다. spring-boot-dependencies에서는 spring boot에서 기본적으로 사용하고 있는 dependencies 들을 정의하고 있다.
<properties> <activemq.version>5.18.2</activemq.version> <classmate.version>1.5.1</classmate.version> <commons-codec.version>1.15</commons-codec.version> ... ... ... </properties>
spring boot 에서 기본적으로 제공하는 dependency 들의 버전을 정의하고 있다. 본 예시에서는 spring boot 3.1.2 버전을 사용하고 있기 때문에 spring boot 3.1.2에서 기본적으로 제공하는 dependency 들의 버전을 알 수 있다.
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-amqp</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>com.fasterxml</groupId> <artifactId>classmate</artifactId> <version>${classmate.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> ... ... ... </dependencies> </dependencyManagement>
dependencyManagement로 spring boot 사용되는 dependency를 정의하고 있다. dependencyManagement 로 정의하고 있기 때문에 자식 pom(개발 프로젝트 pom) 에 <dependencies></dependencies> 내에 artifact 로 정의한 경우에만 dependency 가 추가되지만 버전은 명시하지 않아도 된다. spring-boot-dependencies 에 정의된 버전이 자동으로 적용되기 때문이다.
개발 프로젝트 pom.xml 파일에 기본적으로 추가되는 spring-boot-starter dependency 를 보면 버전 정보를 명시하지 않아도 되는 이유이다.
spring-boot-dependencies 에 정의된 spring-boot-starter 의존성 개발 프로젝트에 지정된 spring-boot-starter 의존성 개발 프로젝트에 다른 버전의 의존성 지정하기
spring-boot-dependencies에서 제공하는 org.apache.activemq:activemq-amqp의 버전은 5.18.2 버전이지만 개발 프로젝트에서 org.apache.activemq:activemq-amqp 의 5.18.1 버전을 사용해야 한다면 2가지 방법으로 버전을 재정의 할 수 있다.
dependencyManagement에서 버전 재정의
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-amqp</artifactId> <version>5.18.1</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-amqp</artifactId> </dependency> ... ... </dependencies>
org.apache.activemq:activemq-amqp 의존성 버전을 5.18.1로 재정의 하였다.
추가된 org.apache.activemq:activemq-amqp 라이브러리는 아래와 같다.
activemq-amqp 의존성만 5.18.1 로 변경 properties 섹션에서 버전 재정의
<properties> <activemq.version>5.18.1</activemq.version> ... ... </properties>
activemq.version 속성 값을 5.18.1 로 재정의 하였다.
추가된 org.apache.activemq:activemq-amqp 라이브러리는 아래와 같다.
activemq 의 모든 의존성이 5.18.1 로 변경 dependencyManagement와 properties를 통해서 의존성 버전을 변경하는 두 가지 방법을 알아보았다. 두 가지 경우에 대한 차이점은 dependencyManagement 는 동일 group의 개별 artifact 의 버전을 변경할 수 있지만 properties 를 이용한 방법은 동일 group 의 모든 artifact 버전이 변경된다는 것이다.
'스프링부트' 카테고리의 다른 글
Spring Boot GraalVM Native Image 빌드 하기 (0) 2023.09.04 spring boot resource 파일 access (0) 2023.08.27 spring boot 필드값 조건별 validation 하기 - json subtype (0) 2023.07.29 spring boot 필드값 조건별 validation 하기 - custom annotation (0) 2023.07.29 Spring REST docs + asciidoctor + restdoc spec + swagger ui 를 통한 문서 자동화 - 필드 제약사항 추가 (커스텀) (0) 2023.07.28 다음글이전글이전 글이 없습니다.댓글