성실한 사람이 되자

성실하게 글쓰자

This is spear

JAVA_SPRING/SPRING BOOT

Build Automation Tool - Maven, pom.xml

Imaspear 2022. 2. 2. 14:57
728x90

Maven

Java를 위한 Build Automation Tool

  • C#, Ruby 등 다른 언어에도 사용 가능

Project Object Model(POM)

  • xml 형태로 프로젝트 정의
  • pom.xml을 분석해 프로젝트 빌드

pom.xml 구조

xml 파일

<?xml version="1.0" encoding="UTF-8"?>

project

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	...
</project>
  • xmlns="a"
    • xmlns 속성은 해당 문서를 위한 XML 네임스페이스(namespace)를 명시한다.
    • 기본 네임스페이스의 선언을 명시한다.
  • xmlns:prefix="a"
    • prefix 속성 값에는 이름 앞에 붙게 되는 네임스페이스 접두사(namespace prefix)를 명시한다.
  • xmlns:xsi="a"
    • 인스턴스 네임스페이스 URI를 지정한다.
  • xsi:schemaLocation="a b"
    • 두 개의 값이 공백으로 구분된다.
    • 첫 번째는 사용할 네임스페이스(보통 기본 네임스페이스와 동일)
    • 두 번째는 참조할 스키마 파일명

modelVersion

<modelVersion>4.0.0</modelVersion>
  • modelVersion
    • 해당 프로젝트 모델의 버전을 명시한다.

parent

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.6.3</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>
  • parent
    • 해당 프로젝트가 해당 parent 프로젝트의 하위 프로젝트라는 것을 명시한다.(상속 관계)

사용자 프로젝트 기본 설정

<groupId>test</groupId>
<artifactId>maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-structure</name>
<description>Demo project for Spring Boot</description>
  • groupId
    • 현재 프로젝트를 설정하고 있는 조직의 도메인
  • artifactId
    • 그룹에 있는 하위 프로젝트의 상세한 Id
  • version
    • 만들 프로젝트의 버전
    • 앞의 숫자 0.0.1은 Major.Minor.Patch의 순서다. 꼭 알아야 한다!!
    • Major : 대규모 변경 사항이 있을 때, release 같은 경우 1.0.0이 됨
    • Minor : 해당 Major에서 변경 사항이 있을 때 해당 Major에서 호환이 가능한 버전(새로운 기능 추가)
    • Patch : 기능적인 부분이 아닌 버그와 같은 사소한 변경사항이 있을 경우 존재
    • SNAPSHOT - 빠른 변경 사항이 존재할 수 있다고 명시
  • name
    • 프로젝트의 이름

properties

<properties>
	<java.version>11</java.version>
</properties>
  • properties
    • 아래 구조에 어떤 버전을 사용하는지 명시할 수 있는 공간
  • java.version
    • 해당 프로젝트에 사용하는 자바 버전 명시

dependencies

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>
  • dependencies
    • 외부 프레임워크와 라이브러리가 들어가는 공간
    • 프로젝트에 추가되는 외부 프레임워크가 저장이 된다.
  • dependency
    • 외부 프레임워크, 라이브러리 개별 단위
    • 프로젝트에 추가된 외부 프레임워크
  • groupId
    • 프로젝트를 설정하고 있는 조직의 도메인
  • artifactId
    • 그룹에 있는 프로젝트의 상세한 Id
  • scope
    • 해당 프레임워크가 적용될 범위를 설정할 수 있고, 5가지가 존재한다.
    • compile
      • 기본값, 컴파일 및 배포 시 같이 제공됨
    • provided
      • complie과 유사하나 JDK 혹은 컨테이너가 런 타임 시에만 해당 프레임워크 제공
    • runtime
      • 컴파일 시에는 적용되지 않고 실행 환경에서만 적용
    • test
      • 테스트 시에만 해당 프레임워크 제공
    • system
      • provided와 유사하나 저장소에서 관리되지 않고, 직접 관리하는 JAR 추가

dependency를 추가하고 싶으면 아래에서 검색해서 dependencies 안에 추가해주면 된다.

 

해당 dependency에 버전을 설정하지 않아도 되는 이유는 스프링 부트가 parent 버전과 호환이 잘되는 버전을 설정해주기 때문이다.

 

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>
  • build
    • 빌드할 때 사용할 플러그인을 설정한다.