요즘 Framework를 배우고 있는데, 시간이 지나면 금방 배운것들을 잊어버릴 것 같아서
다시 한번 정리해두고자 글을 작성해보려고 합니다 :)
Maven의 정의
Apache Maven은
아파치 소프트웨어 재단에서 개발한 java용 프로젝트 관리 도구이다.
프로젝트 관리 도구 또는 빌드 도구(Build tool) 인 Maven은
source 파일을 compile하고 package해서 배포하는 일을 자동화 해준다.
왜 Maven을 사용하는가?
프로젝트를 진행하다보면 여러 라이브러리가 필요하다.
Maven을 사용하지 않는다면 라이브러리를 추가하기 위해 jar파일을 다운받아 포함시켜주어야 한다.
- 프로젝트가 간단하고 많은 라이브러리를 필요로 하지 않는 경우, 딱 몇가지 라이브러리만 다운받아 포함시켜주면 문제없이 진행할 수 있다.
- 프로젝트 규모가 크고 많은 라이브러리가 필요한 경우, 또 여러 사람과 함께 작업중인 프로젝트라면 Maven(프로젝트 관리 도구)를 활용하는 것이 훨씬 쉽게 프로젝트의 라이브러리를 관리할 수 있다.
Maven의 <pom.xml>이라는 특정 문서에 프로젝트에 필요한 라이브러리들을 작성해두면 네트워크를 통해 자동으로 다운받아준다. 즉, 인터넷에서 jar파일을 하나하나 받아서 포함시켜주지 않아도 되며, 라이브러리가 작동하는데 필요한 다른 라이브러리도 모두 관리해주어 더 편리하게 프로젝트를 작업할 수 있게 된다.
Maven LifeCycle
Lifecycle 종류 : clean, default, site
- clean : 빌드 시 생성되었던 산출물을 삭제
- default : 프로젝트 배포절차, 패키지 타입별로 다르게 정의됨
- site : 프로젝트 문서화 절차
Plugin, Goal, Phase 이란?
Maven에서 제공하는 모든 기능들은 플러그인 단위로 제공된다.
플러그인들 별로 goal이라는 것들을 제공하는데, 이 goal들은 Maven에서 실행되는 가장 기본적인 작업 실행단위가 된다.
- Plugin : Maven에서 기능들이 제공되는 단위
- Phase : Build Lifecycle의 각각의 단계를 의미(Phase는 특정 순서에 따라서 goal이 실행되도록 구조를 제공)
- Goal : Maven에서 실행되는 가장 기본적인 작업 실행단위
Maven에서 플러그인을 실행할 때 '플러그인이름(Plugin):플러그인지원골(Goal)'의 형식으로 실행 할 기능을 선택 할 수 있다.
(예를들어, mvn [compiler:compile]은 'compiler' 플러그인에서 'compile' 기능(goal)을 실행한다는 것을 뜻 한다.)
Maven default(기본) Phase와 Goal
기본 라이프사이클은 총 5단계로 이루어져 있다.
[Compile]
명령 : mvn compile
소스코드를 컴파일해주는 단계입니다. 성공적으로 컴파일이 된다면 target/classes폴더가 만들어지고 컴파일된 class파일이 생성된다.
[Test]
명령 : mvn test
테스트 코드를 실행해주는 단계입니다. 실패하면 빌드가 멈춥니다. 이 단계에서 target/test-classes폴더와 안에 컴파일된 class파일이 생성되고 target/surefire-reports 폴더에 테스트 결과가 기록됩니다.
[Package]
명령 : mvn package
해당 프로젝트를 지정한 확장자로 묶어주는 단계입니다. 확장자 타입은 pom.xml에 packaging 태그로 묶이게 되고
"artifactId-version.packaging"형태의 파일을 target폴더안에 생성해줍니다.
[install]
명령 : mvn install
로컬 리포지토리 즉 Maven이 설치되어 있는 PC에 배포하게 됩니다.
[deploy]
명령 : mvn deploy
원격 리포지토리가 등록되어 있다면 해당 원격 리포지토리에 배포하게 됩니다.
Maven 설정파일
1) settings.xml
settings.xml은 maven tool 자체에 관련된 설정을 담당한다.
위치 : MAVEN_HOME/conf/ 아래 ( * MAVEN_HOME은 환경변수에 설정한 경로)
2) pom.xml
pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 root에 존재하는 빌드 옵션을 설정하는 부분이며, 프로젝트 당 1개 이다.
위치 : 프로젝트 최상위 디렉토리