#Maven를 사용하는 이유
Maven 이란?
프로젝트 빌드, 관리에 사용되는도구 아파치 프로젝트 이다.
소스코드로 부터 배포 가능한 산출물(artifact) 빌드 하는 빌드툴이라고도 한다.
메이븐 활용
일반적인 활용은 5가지 흐름으로 구성된다.
build
- 소스코드를 컴파일한다.
- 테스트코드를 컴파일한다.
- 기타 패키지 생성을 위한 바이너리를 생성한다.
package
- 배포 가능한 파일을 생성한다. (war, jar)
Test
- 단위테스트를 실행
- 빌드 결과가 정상적인지 점검한다.
Report
- 빌드/패키지/테스트 결과를 정리하고 빌드 수행 리포트를 생성한다.
Release
- 빌드 후 생성된 artifact를 로컬 혹은 원격 저장소로 저장(배포)한다.
메이븐활용을 위한 5가지 핵심개념!
메이븐을 제대로 사용하기 위해서는 이 5가지는 꼭 알 고 있어야 한다. 근데 몰라도 난 사용했었다.ㅋ
플러그인
- 메이븐(Maven)은 플러그인 실행 프레임워크이다.
- 메이븐은 플러그인 메커니즘에 의해 기능이 확장된다.(모든작업은 플러그인이 수행한다.)
- 플러그인은 다른 산출물(artifacts)와 같이 저장소에서 관리된다.
- 플러그인은 골(goal)의 집합이다.
라이프사이클
- 메이븐 동작 방식은 일련의 단계(phase)에 연계된 goal을 실행하는 것이며, 논리적인 작업 흐름인 단계의 집합이 라이프사이클이다.
- 빌드 단계(build phases)들은 사전 정의된 순서대로 실행된다.
- 모든 빌드 단계는 이전 단계가 성공적으로 실행되었을 때 실행된다.
- 빌드 단계는 goal들로 구성된다.
- Goal은 특정 작업, 최소한의 실행단위이다.
- 각 단계는 0개 이상의 goal과 연관(associate)된다.
- 메이븐은 3개 표준 라이프사이클을 제공한다.
- clean : 빌드 시 생성도었던 산출물을 지운다.
- default : 일반적인 빌드 프로세스를 위한 모델이다.
- site : 프로젝트 문서와 사이트 작성을 수행한다.
- 메이븐 동작 방식은 일련의 단계(phase)에 연계된 goal을 실행하는 것이며, 논리적인 작업 흐름인 단계의 집합이 라이프사이클이다.
의존성
- 라이브러리 다운로드 자동화
- 라이브러리를 찾아서 일일이 다운로드 받을 필요없다. 필요하다고 선언만하면 자동으로 다운로드 받는다.
- 메이븐은 선언적(명령식이 아니다.)
- 사용되는 jar 파일들의 선언을 통해 메이븐이 알아서 관리 재 다운로드, 최신버전 설치등
- 메이븐이 관리한다.
- 라이브러리 디렉터리를 생성할 필요 없음
- 라이브러리 다운로드 자동화
프로파일(profile)
- 서로다른 대상 환경을 위한 다른 빌드 설정
- 동작방식(Activation)
- 메이븐은 정상절차(step) 이외에 프로파일을 위한 절차를 추가로 수행한다.
POM(Project Object Model) 프로젝트 객체모델
프로젝트당 하나의 Pom.xml
3가지 coordinates를 이용하여 자원을 식별
<groupId>org.json</groupId> <artifactId>json</artifactId> <version>12</version>
POM 중요속성
<groupId> : 프로젝트의 패키지 명칭 <artifactId> : artifact 이름, groupId 내에서 유일해야 한다. <version> : artifact 의 현재버전 ex. 1.0-SNAPSHOT <name> : 어플리케이션 명칭 <packaging> : 패키징 유형(jar, war 등) <distributionManagement> : artifact가 배포될 저장소 정보와 설정 <parent> : 프로젝트의 계층 정보 <dependencyManagement> : 의존성 처리에 대한 기본 설정 영역 <dependencies> : 의존성 정의 영역 <repositories> : 이거 안쓰면 공식 maven 저장소를 활용하지만, 사용하면 거기 저장소를 사용 <build> : 빌드에 사용할 플러그인 목록을 나열 <reporting> : 리포팅에 사용할 플러그인 목록을 나열 <properties> : 보기좋게 관리가능, 보통 버전에 많이 쓴다. <!-- properties 에 이렇게 추가하면 --> <spring-version>4.3.3.RELEASE</spring-version> <!-- dependencies 에 이렇게 쓸수 있다. --> <version>${spring-version}</version>
Maven철학
Convention Over Configuration(COC) : 설정보단 관습
- 개발자의 소스나 실행파일 디렉터리 명칭을 보고 알 수 있다.
- 개발자들의 관습 혹은 암묵적으로 알고 있는 디렉터리 위치나 정보를 똑같이 사용하자
- 설정 작업이 간결해지고 쉬워진다.(관습과 다른 내용만 서술/명시한다.)
PS.
지금까지 Maven에 대해서 알아 보았다. gradle, ant 등이 있지만 아직 난 명시적인 maven을 더 선호하고 있다.
근데 코틀린에 관심이 생기면서 그레들이 코틀린 dsl이 추가 되면서 관심이 가는중이다.
- 참고링크 및 자료
메이븐기본이해
'오픈소스' 카테고리의 다른 글
Docker 로 Mysql 5.7 버전 설치하기 (0) | 2021.06.29 |
---|---|
[오픈소스] Armeria (0) | 2019.04.23 |