본문 바로가기

기타

Maven 소개

Java Project 관리 Toolkit으로 프로젝트의 전반적인 Life Cycle을 관리하는 도구.

Maven은 프로젝트 동작에 필요한 라이브러리를 pom.xml에 정의하면, 해당 라이브러리와 동작에 필요한 다른 라이브러리들 까지 관리하여 다운로드합니다.

추가하고 싶은 라이브러리를 검색하려면 아래의 링크를 이용해주세요.

[Maven Repository: javax.inject » javax.inject » 1 (mvnrepository.com)](https://mvnrepository.com/artifact/javax.inject/javax.inject/1)

Maven LifeCycle

LifeCycle 이란 미리 정해진 프로그램의 빌드 순서를 의미합니다.

1) LifeCycle

  • Default(Build): 일반적인 Build Process를 위한 Model
  • Clean: Build 시 생성되었던 파일들을 삭제하는 단계
  • Validate: 프로젝트가 올바른지 확인하고, 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
  • Compile: 프로젝트의 소스코드를 컴파일 하는 단계
  • Test: Unit(단위) 테스트를 수행하는 단계
  • Package: 컴파일 된 소스 코드와 리소스를 jar, war 등의 파일로 배포를 위한 패키징 단계
  • Verify: 통합 테스트를 통한 품질기준 검사 단계
  • Install: 패키지를 로컬 저장소에 설치하는 단계
  • Site: 프로젝트 문서와 사이트 작성 및 생성하는 단계
  • Depoly: 만들어진 pacakge를 원격 저장소에 release 하는 단계

최종 빌드 순서는 Compile -> test -> package

  1. complie: src/main/java 디렉터리 아래의 모든 소스 코드가 컴파일된다.
  2. test: src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드 컴파일
  3. packaging: complie과 test 가 완료된 후 jar, war 같은 형태로 압축하는 작업.

2) Phase(단계)

Build LifeCycle의 각 단계를 Phase라고 합니다.

Phase는 의존관계를 갖고 있어 해당 Phase가 수행되기 위해선 이전 단계의 Phase가 모두 수행되어야 합니다. (순서도의 블록이라고 생각하면 편합니다.)

3) Goal

최소한의 실행 단위를 Task 라 합니다.

하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능을 Goal이라고 합니다.

Phase에 연계된 Goal을 실행하는 과정을 Build라고 합니다.

Maven 설정 파일

1) settings.xml

Maven Build tool과 관련한 설정 파일입니다.

MAVEN_HOME/conf 디렉터리에 위치하며, Maven 설치 시 기본 생성입니다.

Maven을 빌드할 때 의존 관계에 있는 Library, Plugin을 중앙 저장소에서 개발자 PC로 다운로드하게 됩니다.

이 과정에서 다운로드 위치의 기본 값은 'USER_HOME/.m2/repository' 이며, 이 값을 수정하고 싶다면 settings.xml에

원하는 경로를 지정하면 됩니다.

2) POM(Project Object Model)

pom.xml 파일을 의미하며, maven을 이용하는 프로젝트의 root에 존재하는 xml 파일입니다.

 

pom.xml을 통해 프로젝트의 모든 설정, 의존성 등을 알 수 있습니다. 파일명도 변경 가능.

 

pom.xml example

<?xml version="1.0" encoding="UTF-8"?>
<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">
	<modelVersion>4.0.0</modelVersion> <!-- POM의 버전 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.pcloud</groupId> <!-- 프로젝트를 생성하는 조직의 고유 아이디.-->
	<artifactId>demo</artifactId> <!-- 프로젝트 빌드 시 파일 대표 이름. groupId 내에서 유일해야한다. -->
	<version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging> <!-- 패키징 유형 (jar, war, ear) -->
	<name>SpringBoot-Java-Demo</name> <!-- 프로젝트 이름 -->
	<description>Demo project for Spring Boot</description>
	<url></url> <!-- 프로젝트에 대한 참고 Reference 사이트 -->
	<properties> <!-- 버전 관리 -->
		<java.version>1.8</java.version>
	</properties>

	<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>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build> <!-- build 시 사용할 plugin 목록 -->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

[Element List]

Element Name
Description
modelVersion POM model Version
groupId 프로젝트를 생성하는 조직의 고유 아이디.
artifactId 프로젝트 build 시 파일 대표 이름
version 프로젝트의 현재 Version. Project 개발 중은 SNAPSHOT를 접미사로 사용.
packaging 패키징 유형 / jar, war, ear ...
properties 버전 관리
dependencies 프로젝트와 의존관계에 있는 라이브러리 명시
build build에 사용할 플러그인 목록

'기타' 카테고리의 다른 글

EventStorming을 도입하자!  (0) 2024.01.17
IntelliJ 라이브 템플릿 기능 사용하기  (0) 2021.06.30
Tomcat 설치  (0) 2021.05.03
Type vs Interface  (0) 2021.04.26
MSA(Micro Service Architecture)  (0) 2021.04.26