본문 바로가기

JAVA

[JAVA] Maven 이란?

  • Maven이란?
  • 라이프 사이클 종류
  • 플러그 인
  • 의존성(dependency)
  • pom.xml
  • Maven디렉터리 구조

 

Maven 이란?  : 자바용 프로젝트 관리 도구. 

+ Maven은 앞서 빌드에 대해서 알아볼 때 나왔던 빌드 툴 중 하나이다.

 

 

오늘은 자주 사용하고 있는 Maven에 대해 조금 더 자세히 알아봅시다. 

 

Maven

- Maven은 Apache사에서 만든 빌드 툴(build tool)이다.

- pom.xml파일을 통해 정형화된 빌드 시스템으로 프로젝트 관리를 해준다.

- 프로젝트의 전체적인 라이프 사이클을 관리한다.

 

 

 

Maven Life Cycle  및 종류

Life Cycle ? 

Maven은 프레임워크 이기 때문에 동작 방식이 정해져 있고, 

미리 정의하고 있는 빌드 순서가 있다. 

이를 라이프 사이클(LifeCycle) 이라고 한다.

 

Life Cycle의 종류 ?

◎ Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다. 
◎ Clean : 빌드 시 생성되었던 파일들을 삭제하는 단계 
◎ Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계 
◎ Compile : 프로젝트의 소스코드를 컴파일 하는 단계 
◎ Test : 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능) 
◎ Pacakge : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만드는 단계 
◎ Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계 
◎ Install : 패키지를 로컬 저장소에 설치하는 단계 
◎ Site : 프로젝트 문서와 사이트 작성, 생성하는 단계 
◎ Deploy : 만들어진 package를 원격 저장소에 release 하는 단계

 

phase(단계)

각 라이프 사이클 안에는 더 작은 단위의 빌드단계가 정의되어 있는데 이를 phase라고 한다.

Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 한다.

 

 

 

플러그 인

- Maven은 플러그인을 구동해주는 프레임 워크이다. 모든 작업은 플러그인에서 수행한다.

- Maven은 여러 플러그 인 으로 구성되어 있으며,

  각각의 플러그 인인 하나 이상의 Goal(명령,작업)을 포함하고 있다.

- Goal은 Maven의 실행단위이고, 플러그 인과 Goal의 조합으로 실행한다.

- Maven은 여러 Goal을 묶어서 LifeCycle Phases(단계)로 만들고 실행한다.

 

 

 

의존성 (Dependency)

- 개발자가 프로젝트에 사용할 라이브러리를 pom.xml에 dependency로 정의만 해두면 

  Maven이 repository에 검색해서 자동으로 추가해주며, 참조하는 lib까지 추가해준다.

  이것을 '의존성 전이'라고 한다.

 

pom.xml

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.2</version>
  <scope>test</scope>
</dependency>

 

 

 

Pom.xml (Project Object Model)

Maven을 이용하는 프로젝트의 Root에 존재하는 XML파일.

프로젝트 당 1개가 있으며, 프로젝트의 모든 설정, 의존성등을 알 수 있다.

 

 

 

Maven 디렉터리 구조

메이븐은 bast practices을 기반으로 정규화된 디렉터리 구조를 제공하고 있으며,

모든 소스파일들은 /src 디렉터리 이하에, 빌드된 output은 /target 디렉터리  밑에 위치한다.

 

- /pom.xml : 프로젝트 객체모델. 해당 프로젝트에 대한 전반적인 정보를 갖는다.

- /src/main/java : Java 소스 파일 위치

- /src/main/resource : 배포할 리소스, XML, properties, ...

- /src/main/webapp : 웹 어플리케이션 관련 파일 위치(WEB-INF, css등)

- /src/test/java : 테스트 케이스 java소스

- /src/test/resource : 테스트 케이스 리소스

- /target : 빌드된 output이 위치하는 디렉터리

 

 


Reference

 

https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80

https://goddaehee.tistory.com/199

https://sjh836.tistory.com/131

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev:dep:maven:maven_%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC_%EA%B5%AC%EC%A1%B0