아래 참조 블로그를 보고 명확하게 이해하기 위해 클론한 것입니다.
Maven을 알아보기 전에 사전 지식을 알아보자.
1. 빌드(Build)
Build는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다. - wiki
한 마디로 개발자가 작성한 소스코드 및 각 자원들(xml, jpg, properties)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물이다.(jar, war 등)
2. 빌드 도구(Build Tool)
- 프로젝트 생성, 테스트, 빌드, 배포 등의 작업을 위한 프로그램
- 라이브러리 추가, 버전 동기화 등의 어려움을 해소하기 위해 등장
- Ant -> Maven -> Gradle의 추세
Maven
1. 정의 및 특징
- 자바용 프로젝트 관리 도구로 Apache Ant의 대안으로 만들어졌다.
- 프로젝트의 라이프 사이클을 관리하는 도구이며 편리하고 이점이 많다.
- 특정 문서(pom.xml)에 필요한 라이브러리를 명시해 놓으면 해당 라이브러리를 네트워크를 통해 중앙 저장소에서 자동으로 다운 받아 사용가능하다.(해당 라이브러리의 의존 관계에 있는 라이브러리까지 모두 다운)
- 중앙 저장소(아파치 재단에서 관리)를 통해 라이브러리를 공유하는게 가능하고 private한 중앙 저장소를 구축할 수도 있다.
- 간단한 설정을 통한 배포가 가능하다.
2. Lifecycle
메이븐은 프레임워크이기 때문에 동작 방식이 미리 정해져있다. 이를 라이프 사이클(Lifecycle)이라 한다.
- Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다.
- Clean : 빌드 시 생성되었던 파일들을 삭제한다.(target)
- Validate : 프로젝트가 올바른지 확인하고 필요한 정보를 사용할 수 있는지 확인하는 단계
- Compile : 프로젝트 소스코드를 컴파일한다.
- Test : Unit Test Framework를 통해 컴파일 된 소스 코드를 테스트한다.
- Package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 배포를 위한 패키징한다.
- Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
- Install : 패키지를 로컬 저장소에 설치한다.(다른 프로젝트에서 접근가능)
- Site : 프로젝트 문서와 사이트 작성, 생성한다.
- Deploy : 만들어진 package를 원격 저장소에 release한다.
최종 빌드 순서는 compile -> test -> packaging
- compile : src/main/java 디렉토리 아래의 모든 소스 코드가 컴파일된다.
- test : src/test/java, src/test/resources 테스트 자원을 복사 및 테스트 소스 코드가 컴파일된다.
- packaging : 컴파일과 테스트가 완료된 후 jar, war 등과 같은 형태로 묶어준다.
* Phase(단계)
Build Lifecycle의 각 단계를 Phase라 한다.
Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 Phase가 수행되어야 한다.
* Goal
- 특정 작업, 최소한의 실행 단위
- 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능(명령)을 Goal이라고 한다.(각각의 Phase에 연계된 Goal을 실행하는 과정을 Build라고 한다.)
- 플러그인의 goal을 실행하는 방법은 다음과 같다.
- mvn groupId:artifactId:version:goal
- mvn plugin:goal
3. 설정파일
1) settings.xml
- 메이븐 빌드 툴과 관련한 설정파일
- MAVEN_HOME/conf 디렉토리에 위치(메이븐 설치 시 기본 제공)
-
- 메이븐을 빌드할 때 라이브러리, 플러그인을 중앙 저장소에서 다운로드 하는 기본 위치는
USER_HOME/.m2/repository (C:\Users\user.m2)
인데 setting.xml에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다.
2) POM(Projecgt Object Model)
- POM은 pom.xml을 말하며 pom.xml은 메이븐을 이용하는 프로젝트의 root에 존재하는 xml파일이다.(메이븐 프로젝트 생성 시 최상위 디렉터리에 존재한다.)
- 프로젝트 당 1개며 프로젝트의 의존성 및 설정을 확인할 수 있다.
- 다른 파일 이름으로 지정 가능하나(mvn -f 파일명.xml test) pom.xml로 사용하기를 권장
엘리먼트(Element)
- modelVersion : POM model의 버전
- parent : 프로젝트의 계층 정보, pom도 부모가 존재해서 중복을 제거할수 있다고 한다.
- groupId : 프로젝트를 생성하는 조직의 고유 아이디.
- artifactId : 프로젝트 빌드 시 파일 대표이름. groupId내에서 유일해야 한다.
- version : 프로젝트의 현재 버전, 개발 중일 때는 SNAPSHOT을 접미사로 사용
-
- Maven Build시 artifactId-version.packaging 과 같은 규칙으로 생성된다.(YJ-0.0.1-SNAPSHOT.war)
- packaging : 패키징 유형(jar, war, ear 등)
- name : 프로젝트 이름
- description : 프로젝트 설명
- url : 프로젝트에 대한 참고 Reference
- properties : pom.xml에서 사용할 수 있는 변수 같은 개념, 재사용 가능하다.
ex) <version.>${java.version}</version.> - dependencies : 프로젝트와 의존관계 있는 라이브러리를 명시하는 곳
- build : 빌드에 사용할 플러그인 목록
- plugin : 프로젝트를 입맞에 맞게 패키징, 배포 등을 위한 간단한 설정
각각의 플러그인은 하나 이상의 goal(명령, 작업)을 포함하고 있다.
Goal은 maven의 실행단위.
각 goal도 사실상 plugin이 내장되어 있다.
https://goddaehee.tistory.com/199
http://itnovice1.blogspot.com/2018/12/mvn-package.html
https://www.baeldung.com/maven-local-repository
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot란? (0) | 2021.02.03 |
---|