• 티스토리 홈
  • 프로필사진
    알쓸개잡
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
알쓸개잡
  • 프로필사진
    알쓸개잡
    • 분류 전체보기 (92)
      • 스프링부트 (52)
      • AWS (5)
      • 쿠버네티스 (7)
      • 자바 (19)
      • 인프라 (0)
      • ETC (8)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      • 반응형
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • spring-boot-starter-parent 와 spring-boot-dependencies
        2023년 08월 15일
        • 알쓸개잡
        • 작성자
        • 2023.08.15.:48
        Spring Boot는 최소한의 구성 작업으로 프로덕션에 바로 사용할 수 있는 Spring 애플리케이션을 빌드하는 프로세스를 간소화하도록 설계되었다. 이를 위해 Spring Boot 기반 애플리케이션에 대한 기본 구성 및 종속성을 제공하는 특별한 상위 프로젝트인 spring-boot-starter-parent 가 만들어졌다.
        spring-boot-starter-parent 에 지정된 종속성을 통해서 기본적으로 제공되는 여러 종속성들을 간편하게 사용할 수 있다.

         

        spring-boot-starter-parent 관련 내용은 아래 링크에서 확인해 볼 수 있다.

        https://central.sonatype.com/artifact/org.springframework.boot/spring-boot-starter-parent/3.1.2/overview

         

        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 내용은 아래 링크에서 확인할 수 있다.

        https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-parent/3.1.2/spring-boot-starter-parent-3.1.2.pom

         

        spring-boot-starter-parent 의 버전목록은 아래 링크에서 확인할 수 있다.

        https://central.sonatype.com/artifact/org.springframework.boot/spring-boot-starter-parent/3.1.2/versions

         

        개발 중인 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
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바