[인실리코젠] Maven에 대하여

2024. 1. 12. 16:20·인실리코젠

Apache POI 라이브러리를 사용하여 주간 문제를 풀이하였었다. 풀이 시 프로젝트를 Maven을 통해서 생성하였는데 당시 구글링을 통해 넘어갔던 개념에 대해서 다시 한 번 짚고 넘어가기 위해 본 글을 작성한다.

 

Maven에 대해 알아보기 전에 빌드 개념에 대해서 먼저 알아보자.

 

빌드란?

프로젝트를 위해 작성한 코드나 여러 자원들(.xml, .jar, .properties)를 JVM이나 톰캣 같은 WAS가 인식할 수 있는 구주로 패키징하는 과정 및 결과물

 

Maven

  • Apache 사에서 만든 빌드 툴
  • pom.xml 파일을 통해 정형화된 빌드 시스템으로 프로젝트를 관리
  • 프로젝트의 전체적인 라이프 사이클 관리

특징

  • 간단한 프로젝트 설정
  • 자동 업데이트, 종속성 폐쇄를 포함한 뛰어난 종속성 관리
    • 종속성 관리
      •  Maven은 JAR 및 기타 종속성의 중앙 저장소 사용을 권장
      •  Maven 사용자는 프로젝트 전체에서 JAR을 재사용할 수 있으며 프로젝트 간 통신을 장려하여 이전 버전과의 호환성 문제를 처리
  • 정형화된 빌드 시스템 제공
  • pom과 플러그인 세트를 사용하여 프로젝트 빌드

구조

 

ant와의 차이점

  • Ant가 비교적 자유도가 높다. 전처리, 컴파일, 패키징, 테스팅, 배포 가능
  • Maven은 정해진 라이프사이클에 의하여 작업 수행
  • 전반적인 프로젝트 관리 기능까지 포함

gradle과의 차이점

  • XML 대신 groovy 스크립트를 사용하여 동적인 빌드 가능
  • maven은 멀티프로젝트에서 상속구조인데, gradle은 주입 방식
  • 멀티프로젝트에서 gradle이 더 적합

plug in

  • 메이븐은 플러그인을 구동해주는 프레임워크
  • 플러그인은 다른 산출물과 같이 저장소에서 관리
  • 메이븐은 여러 플러그인으로 구성되어 있음
    • 각각의 플러그인은 하나 이상의 goal(명령)을 포함
    • goal : Maven의 실행 단위
  • plug in과 goal의 조합으로 실행
    • ex. mvn <plugin>:<goal> = mvn archetype:generate
       
  • 메이븐은 여러 goal을 묶어서LifeCycle Phase로 만들어서 실행

 

플러그인 골

Maven에서 플러그인을 실행할 때에는 '플러그인이름:플러그인지원골'의 형식으로 실행할 기능을 선택한다. 예를 들어 compiler:compile은 'compiler'는 플러그인에서 'compile' 기능(goal)을 실행한다는 것을 뜻한다.

 

플러그인 목록

구분 Plugin명 설명
core plugins clean, compiler, deploy, failsafe, install, resources, site, surefire,
verifier
기본 단계에 해당하는 핵심 플러그인
Packaging types/
tools
ear, ejb, jar, rar, war, app-client, shade 압축 도구
Reporting plugins changelog, changes, checkstyle, javadoc, pmd, surefire-report 리포팅 도구
Tools ant, antrun, archetype, assembly, dependency, pdf, plugin,
repository
기타 다양한 도구

 

 

Life Cycle

미리 정해진 빌드 순서로 메이븐은 clean , build, site의 라이프 사이클을 제공
  • Phase(단계)
    • 빌드 라이프사이클의 각 단계를 Phase라고 한다.
    •  Phase는 의존관계를 가지고 있기 때문에 해당 Phase가 실행되기 위해서는 이전 단계의 Phase가 모두 수행이 되어야한다.
  • Goal 
    • 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원한다.
    • 플러그인에서 실행할 수 있는 각각의 기능을 Goal 이라고 한다.
    • 특정 작업을 말하며, 최소한의 실행 단위이다.

라이프 사이클

  •  clean : 빌드 시 생성되어있었던 파일들을 삭제한다.
  • validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
  • compile : 프로젝트 소스코드를 컴파일 하는 단계
  • test : 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능하다.
  • package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일의 배포를 위한 패키지로 만든다.
  • verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
  • site : 프로젝트 문서와 사이트 작성, 생성하는 단계
  • deploy : 만들어진 package를 원격 저장소에 release하는 단계
더보기

[표] 디폴트 라이프사이클의 주요 단계(phase)

 단계 설명  단계에 묶인 플러그인 실행
generate-sources 컴파일 과정에 포함될 소스를 생성한다. 예를 들어 DB 테이블과 매핑되는 자바 코드를 생성해주는 작업이 이 단계에서 실행된다.  
process-sources 필터와 같은 작업을 소스 코드에 처리한다.  
generate-resources 패키지에 포함될 자원을 생성한다.   
process-resources 필터와 같은 작업을 자원 파일에 처리하고, 자원 파일을 클래스 출력 디렉토리에 복사한다. resources:resources 
compile 소스 코드를 컴파일해서 클래스 출력 폴더에 클래스를 생성한다. compiler:compile
generate-test-sources 테스트 소스 코드를 생성한다. 예를 들어 특정 클래스에서 자동으로 테스트 케이스를 만드는 작업이 이 단계에서 실행된다.  
process-test-sources 필터와 같은 작업을 테스트 소스 코드에 처리한다. resources:testResources 
generate-test-resources 테스트를 위한 자원 파일을 생성한다.   
process-test-resources 필터와 같은 작업을 테스트 자원 파일에 처리하고, 테스트 자원 파일을 테스트 클래스 출력 폴더에 복사한다.  
test-compile 테스트 소스 코드를 컴파일해서 테스트 클래스 추력 폴더에 클래스를 생성한다. compiler:testCompile
test 테스트를 실행한다. surefire:test
package 컴파일 된 코드와 자원 파일들을 jar, war와 같은 배포 형식으로 패키징한다. 패키징에 따라 다름
jar - jar:jar
war - war:war
pom - site:attach-descriptor
ejb - ejb:ejb
install 로컬 리포지토리에 패키지를 복사한다. install:install
deploy 생성된 패키지 파일을 원격 리포지토리에 등록하여, 다른 프로젝트에서 사용할 수 있도록 한다. deploy:deploy

 

라이프사이클의 특정 단계를 실행하려면 다음과 같이 mvn [단계이름] 명령어를 실행

 

mvn test
mvn deploy

 

플러그인 직접 실행

mvn surefire:test

 

          Maven은 표준화된 라이프사이클을 제공하고 있기 때문에 개발자가 컴파일-테스트-패키징 등의 과정을 손으로 정의하지 않아도 되며, 개발자는 Maven이 제공하는 단계 중 필요한 단계만 실행하면 된다.
즉, 나머지 작업(컴파일, 테스트 실행, jar 파일 생성)은 모두 Maven이 처리

 

 

'인실리코젠' 카테고리의 다른 글

[인실리코젠] Spring Boot + MVC 이론 정리  (0) 2024.01.17
[인실리코젠] WebCrawling - 1  (0) 2024.01.16
[인실리코젠] Apache POI 라이브러리를 이용한 Exel 데이터 읽기 2  (0) 2024.01.12
[인실리코젠] Programmers Lv2.JadenCase 문자열 만들기 리뷰 답변 및 BPM(Business Process Management) 프로세스 모델링  (1) 2024.01.11
[인실리코젠] Apache POI 라이브러리를 이용한 Exel 데이터 읽기  (2) 2024.01.11
'인실리코젠' 카테고리의 다른 글
  • [인실리코젠] Spring Boot + MVC 이론 정리
  • [인실리코젠] WebCrawling - 1
  • [인실리코젠] Apache POI 라이브러리를 이용한 Exel 데이터 읽기 2
  • [인실리코젠] Programmers Lv2.JadenCase 문자열 만들기 리뷰 답변 및 BPM(Business Process Management) 프로세스 모델링
min._.uuk_
min._.uuk_
하루 하나 기록하기
  • min._.uuk_
    기록하는 습관
    min._.uuk_
  • 전체
    오늘
    어제
    • 분류 전체보기 (33)
      • 알고리즘 (15)
      • 자바 스크립트 (2)
      • 인실리코젠 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    인실리코젠 #크롤링 #SpringBoot #MVC #jQuery
    백준 #세그먼트 트리 #구간합 #c언어 #골드1 #탐색
    백준 #1407번 #재귀함수
    Apache #POI #JAVA #maven
    백준 #BOJ #스택 #수열
    백준 #MST #최소비용신장트리 #크루스칼 #그리디 #알고리즘
    #BOJ #백준 #10989번 #C언어 #카운팅정렬 #정렬
    백준 #동적계획법 #dp #백트래킹 #dfs
    백준 #후위표기식 #스택 #중위표기식 #우선순위 #1918번
    JS #테트리스 #HTML #CSS #추억의 게임
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min._.uuk_
[인실리코젠] Maven에 대하여
상단으로

티스토리툴바