1. Maven이란?
Maven이란 자바용 프로젝트 관리 도구이다. (공식사이트: Apache Maven Project)
Maven은 프로젝트의 전체적인 LifeCycle을 관리하는 관리도구이다. 프로젝트 객체 모델(Proejct Object Model:POM) 이라는 개념을 바탕으로 프로젝트의 의존성 관리, 라이브러리 관리, 프로젝트 LifeCycle 관리 기능 등을 제공한다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.
빌드(build) 란?
소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다.
이를 좀더 쉽게 풀어 말하자면 우리가 작성한 소스코드(Java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 잇는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.
메이븐의 특징
- 필요한 라이브러리를 특정 문서(pom.xml)에 정의만 해주면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한 하위 라이브러리까지 네트워크를 통해서 자동으로 다운받아준다.
- 중앙 저장소를 통한 자동 의존성 관리를 한다. 중앙 저장소는 라이브러리를 공유하는 파일서버이고, 저장소는 아파치재단에서 운영관리하는 저장소를 사용할 수도 있고 별도의 사설 저장소를 사용할 수도 있다.
- 프로젝트 전체내용에 대한 기술 및 설정을 담당하는 pom과 라이브러리관리에 대한 dependency / repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드 생명주기를 다루는 라이프사이클 및 관련 플러그인들과의 연동을 다루는 부분으로 구성된다.
Maven Architecture
Maven LifeCycle
메이븐은 정해진 라이프 사이클을 통해 프로젝트를 빌드한다.
메이븐 라이프 사이클의 종류는 기본, clean, site가 있다.
각 라이프 사이클 안에는 더 작은 단위의 빌드 단계가 정의되어 있는데 이를 phase라고 한다.
phase는 논리적인 빌드 단계이고, 실제로는 phase에 연결된 plug-in있고 plug-in이 수행하는 명령을 goal이라고 한다.
요약하자면 빌드 순서는 Compile - Test - Package 이다.
Clean -> init -> compile -> test-compile -> test -> package -> integration-test -> verify -> install -> deploy -> site
2. Maven 설정 파일
1) settings.xml
- Maven build tools과 관련된 설정을 담당한다.
- MAVEN_HOME/conf 에 위치 ( *MAVEN_HOME은 환경변수에 설정한 경로)
2) pom.xml
하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리에 "pom.xml" 이라는 파일이 생성되었을 것이다. pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다.
꼭 pom.xml이라는 이름을 가진 파일이 아니라 다른 파일로 지정할 수도 있다. (ex> mvn -f ooo.xml test)
[pom.xml Element]
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.or.connect</groupId>
<artifactId>examples</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mysample</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element)이다.
- modelVersion : POM model의 버전이다.
- groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.
- artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정한다. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성된다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성된다.
- packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정한다. jar, war, ear 등이 해당된다.
- version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용한다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.
- name : 프로젝트의 이름이다.
- url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능한다.
해당 엘리먼트 안에 필요한 라이브러리를 지정하게 된다.
#References
https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80
'Java > Maven' 카테고리의 다른 글
[Maven] mvn clean install (0) | 2022.09.22 |
---|---|
Maven repository 설정 (0) | 2022.08.03 |