목표

  • Maven에 대한 기본개념 이해
  • Maven의 의존성 관리 빌드 자동화 이해

Maven

의존성 관리와 빌드 자동화 기능을 제공하는 툴이며, 프로젝트 내에서 pom.xml을 주설정파일로 하여 동작한다.


의존성 관리

개발시 사용하는 라이브러리에 대해 pom.xml을 기준으로 메이븐 저장소로부터 다운받아 개발자의 프로젝트에 추가해 준다. (로컬저장소의 .m2 폴더에 다운로드 되며 가끔 의존성이 꼬일경우 .m2 폴더 내용을 날려주면 해결되는 경우가 있었다.)

라이브러리 추가를 위해서는 <dependencies/> 이하에 <dependency/> 태그에 작성하며 groupId, artifactId, version 세가지 정보가 필요하다. 보통 maven repository 웹사이트에서 라이브러리를 검색하여 등록한다,

dependency에 <scope>의 경우 compile, runtime, provided, test등이 올 수 있는데 해당 라이브러리가 언제 필요한지, 언제 제외되는지를 나타낸다.


빌드 자동화

메이븐은 자바 프로젝트의 빌드(Build)를 자동화해 주는 빌드 툴(Build Tool)이다. 즉, 자바 소스를 컴파일하고 패키징하여 배포까지 자동으로 해주는 도구이다.

컴파일->패키징->배포 과정(maven build)에 대한 세부 설정값들은 pom.xml에 작성한다.

 

maven build는 LifeCycle이 존재하며, 메이븐에 내장된 라이프사이클은 default, clean, site 3가지가 있다.

라이프사이클은 세부적으로 페이즈(phase)로 구성되어 있다. 예를 들어 default 라이프사이클은 다음과 같이 7개의 페이즈로 구성되며(전부는 아니고 큰 줄기로하면) 이들 사이에는 실행순서가 존재한다.

mvn install 명령어로 install 페이즈를 실행하면 1번 validate 페이즈부터 6번 install 페이즈까지 순차적으로 실행되는 구조다. (deploy는 실행되지 않는다.)

  1. validate
  2. compile
  3. test
  4. package
  5. verify
  6. install
  7. deploy

mvn 명령은 스페이스를 구분자로 여러동작을 한번에 지정할 수 있다.

mvn clean deploy : clean 페이즈 실행 후 1번 페이즈 validate부터 7번 페이즈 deploy까지 실행한다.

 

위의 Build Phase는 다시 Plugin Goal의 모음으로 이루어져 있다. Phase는 구체적인 작업을 나타내지는 않는다. 예를들어 package는 패키징된 결과물이 jar 파일이냐 war 파일이냐에 따라 다르게 수행되어야 하지만 Phase는 세부정보를 표시하지 않는 상위 개념이다.

pom.xml의 설정에 따라서 Phase마다 수행되는 세부작업을 Goal이라 부르고, Goal들의 집합을 Plugin이라 한다. 각 Phase마다 수행되어야할 Goal들이 맵핑되어 있고, Phase를 실행하면 설정에 맞는 Goal이 수행되는 구조다.

Goal은 하나 이상의 Phase에 맵핑되어 있거나, 맵핑이 되어 있지 않은 것도 있는데 맵핑된 Phase가 없다면 해당 Goal을 직접적으로 호출하여 실행할 수 있다.

 

mvn clean dependency:copy-dependencies package

  1. clean phase 실행(라이프사이클 순서에 따라 순차적으로)
  2. dependency:copy-dependencies : dependency plugin의 copy-dependencies goal 실행
  3. package phase 실행(라이프사이클 순서에 따라 순차적으로)

 

메이븐의 빌드자동화를 정리하면,

  • LifeCycle : 순서를 가지는 Phase의 집합
  • Phase : LifeCycle의 구성요소로 Phase간에는 정해진 순서가 있다.
  • Goal : 메이븐이 수행할 구체적인 작업으로 하나의 페이즈는 하나의 골과 맵핑된다.
  • Plugin : Goal의 집합

라이프사이클에 따른 페이즈 구성이나 설정에 따라 수행되는 골의 종류 등은 메이븐의 공식 사이트를 참고하고 대략적인 개념정리는 여기서 마무리 하도록 한다.


참고

메이븐 웹 - http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

메이븐파헤치기(김우용) - https://www.slideshare.net/ssuser5445b7/ss-56566336?qid=927855f5-7c8a-4f88-a834-d31292324fd2&v=&b=&from_search=4

 

 


 

 

'개발 > 기타' 카테고리의 다른 글

패스워드 암호화에 대해서  (0) 2020.12.06
LastModified 헤더를 이용한 파일변경 체크  (0) 2020.12.06
UTC, GMT, Epoch Time  (0) 2019.10.11
Ajax에 관하여  (0) 2018.12.13
META-INF 디렉터리에 대하여  (1) 2018.04.12

+ Recent posts