Time does not change us. It just unfolds us.

Web/Else

[Web]Maven LifeCycle

소젬 2021. 11. 4. 13:57

Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있다. 

프로젝트의 빌드(Build)를 자동화해 주는 빌드 툴로서 컴파일하고 패키징하여 배포까지 자동으로 해주는 도구이다.

Maven에서 제공하는 build 단계(LifeCycle)이 존재하며, 메이븐에 내장된 라이프사이클은 default, clean, site 3가지가 있다.

* 라이프 사이클
mvn process-resources : resources:resources의 실행으로 resource 디렉토리에 있는 내용을 target/classes로 복사한다.
mvn compile : compiler:compile의 실행으로 src/java 밑의 모든 자바 소스를 컴파일해서 target/classes로 복사
mvn process-testResources, mvn test-compile : 이것은 위의 두 개가 src/java였다면 test/java의 내용을 target/test-classes로 복사. (참고로 test만 mvn test 명령을 내리면 라이프사이클상 원본 소스로 컴파일된다.)
mvn test : surefire:test의 실행으로 target/test-classes에 있는 테스트케이스의 단위테스트를 진행한다. 결과를 target/surefire-reports에 생성한다.
mvn package : target디렉토리 하위에 jar, war, ear등 패키지파일을 생성하고 이름은 <build>의 <finalName>의 값을 사용한다 지정되지 않았을 때는 아까 설명한 "artifactId-version.extention" 이름으로 생성
mvn install : 로컬 저장소로 배포
mvn deploy : 원격 저장소로 배포
mvn clean : 빌드 과정에서 생긴 target 디렉토리 내용 삭제
mvn site : target/site에 문서 사이트 생성
mvn site-deploy : 문서 사이트를 서버로 배포
위와 같은 진행 순서로 라이프 사이클이 진행된다.


이제 <build>에서 설정할 수 있는 값을 확인해보자.
<finalName> : 빌드 결과물(ex .jar) 이름 설정
<resources> : 리소스(각종 설정 파일)의 위치를 지정할 수 있다.
- <resource> : 없으면 기본으로 "src/main/resources"
<testResources> : 테스트 리소스의 위치를 지정할 수 있다.
- <testResource> : 없으면 기본으로 "src/test/resources"
: 빌드할 때 접근할 저장소의 위치를 지정할 수 있다. 기본적으로 메이븐 중앙 저장소인 http://repo1.maven.org/maven2로 지정되어 있다.
<outputDirectory> : 컴파일한 결과물 위치 값 지정, 기본 "target/classes"
<testOutputDirectory> : 테스트 소스를 컴파일한 결과물 위치 값 지정, 기본 "target/test-classes"
<plugin> : 어떠한 액션 하나를 담당하는 것으로 가장 중요하지만 들어가는 옵션은 제 각각이다. 다행인 것은 플러그인 형식에 대한 것은 안내가 나와있으니 그것을 참고해서 작성하면 된다.
plugin이 작성되어 있다고 무조건 실행되는 것은 아니다. 명확한 것은 아니지만 따로 실행할 플러그인을 메이븐 명령어로 실행해야 하는 것으로 알고 있다.
- <executions> : 플러그인 goal과 관련된 실행에 대한 설정
- <configuration> : 플러그인에서 필요한 설정 값 지정


출처: https://jeong-pro.tistory.com/168 [기본기를 쌓는 정아마추어 코딩블로그]
라이프사이클의 각 빌드 단계를 페이즈(phase)라고 한다.
라이프사이클은 여러 단계(페이즈)로 나뉘어져 있으며, 각 페이즈는 의존 관계를 갖는다.
  • 기본 라이프사이클
    • compile : 소스 코드를 컴파일한다.
    • test : 단위 테스트 실행한다. (기본설정은 단위 테스트가 실패하면 빌드 실패로 간주함)
    • package : 컴파일된 클래스 파일과 리소스 파일들을 war 혹은 jar와 같은 파일로 패키징한다.
    • install : 패키징한 파일을 로컬 저장소에 배포한다. (USER_HOEM/.m2/)
    • deploy : 패키징한 파일을 원격 저장소에 배포한다. (nexus 혹은 maven central 저장소)
  • clean 라이프 사이클
    • clean : 메이븐 빌드를 통하여 생성된 모든 파일을 삭제한다.
  • site 라이프 사이클
          site : 메이븐 설정파일 정보를 활용하여 프로젝트에 대한 문서 사이트를 생성한다.
          site-deploy : 생성한 문서 사이트를 설정되어 있는 서버에 배포한다.
출처: https://araikuma.tistory.com/444 [프로그램 개발 지식 공유]

 

 

 

 

Maven LifeCycle

https://m.blog.naver.com/vefe/221770683177

 

Maven 기본 개념

Maven을 이해하기 위해서는 Plugin, Phase, Goal, LifeCycle을 이해해야 한다. Plugin, Goal Mave...

blog.naver.com

https://jeong-pro.tistory.com/168

 

메이븐(Maven)은 알고 스프링(Spring)을 쓰는가? (pom.xml 분석하며 가볍게 정리하는 빌드 툴, Maven)

메이븐(Maven)은 알고 스프링(Spring)을 쓰는가? 제목과 같은 질문에 필자는 제대로 답변할 수 없었다. 단순하게는 maven repository에서 dependency 추가해서 필요한 라이브러리 쓰는 정도? 무엇을 위해

jeong-pro.tistory.com

 

'Web > Else' 카테고리의 다른 글

[Web]HttpSessionListener, AtomicInteger  (0) 2021.11.15
[Web]Token 기반 인증  (0) 2021.11.11
[Web]multipart/form-data  (0) 2021.10.28
[Web]Url 주소 가져오기  (0) 2021.10.25
[Web]사용자 정의 예외 클래스  (0) 2021.10.25