Programming/Spring
[Spring] 빌드 툴 - maven
지윤이글스
2023. 1. 3. 15:32
▷Maven 이란?
자바 전용 프로젝트로 Lifecycle 관리 목적 빌드 도구이며, Apache Ant 불편함을 해결하고자 만들어진 빌드 관리 도구이며 스프링에서 사용된다.
<<<추가+++
프로젝트의 전체적인 라이프사이클을 관리하는 관리도구이다.
프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리도구이다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.
1. Maven 특징
- Lifecycle : 정해진 Lifecycle 에 의하여 작업수행, 전반적인 프로젝트 관리 기능을 포함하고 있다.
- 프로젝트 모델링 : Maven 은 필요한 라이브러리를 pom.xml 에 정의한다.
- Plugins을 통한 전역적인 재사용 : Maven 은 빌드에 대한 대부분의 책임을 각 플러그인에 위임한다. 이러한 플러그인들은 Maven저장소(Repository) 에 저장되어진다.
- 공통 인터페이스
2. pom.xml
root 에 존재하는 xml 파일로 프로젝트마다 1개씩 가지고 있다. 필요한 라이브러리를 pom.xml에 정의하면 해당 라이브러리 실행, 설치에 필요한 다른 라이브러리까지 관리하고 네트워크를 통해서 자동으로 다운받아준다.


- Clean : 빌드 시 생성되었던 파일들을 삭제하는 단계
- Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는 지 확인 하는 단계
- Compile : 프로젝트의 소스코드를 컴파일 하는 단계
- Test : 유닛 테스트를 수행하는 단계( 테스트 실패 시 빌드 실패로 처리 )
- Package : 실제 컴파일된 소스코드와 리소스들을 jar, war 등등의 파일의 배포를 위한 패키지로 만드는 단계
- Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
- Install : 패키지를 로컬 저장소에 설치하는 단계
- Site : 프로젝트 문서와 사이트 작성, 생성하는 단계
- Deploy: 만들어진 패키지를 원격저장소에 release 하는 단계
3.
<groupId>
- groupId는 당신의 프로젝트를 모든 프로젝트 사이에서 고유하게 식별하게 해 주는 것이다.
- 따라서, groupId에는 네이밍 스키마를 적용하도록 한다.
- groupId는 package 명명 규칙을 따르도록 한다.
- 즉, 최소한 당신이 컨트롤하는 도메인 네임이어야 한다.
- 하위 그룹은 얼마든지 추가할 수 있다.
<artifactId>
- artifactId는 버전 정보를 생략한 jar 파일의 이름이다.
- 이름은 원하는 것으로 아무거나 정해도 괜찮다.
- 단, 소문자로만 작성하도록 한다.
- 단, 특수문자는 사용하지 않는다.
- 만약 써드 파티 jar 파일이라면, 할당된 이름을 사용해야 한다.
- 예: maven, commons-math
<version>
- 숫자와 점으로 이루어진 일반적인 버전 형태를 사용한다(1.0, 1.1, 1.0.1, …).
- SNAPSHOT(nightly) 빌드 날짜를 버전으로 사용하지 않도록 한다.
- 써드 파티 아티팩트라면, (좀 이상하게 보일 수 있어도) 그들의 버전 넘버를 이어받아 사용하도록 한다.
<dependencies>
-- dependencies 태그안에는 프로젝트와 의존관계에 있는 라이브러리들을 관리
<build>
- pom파일 내에서 여러 플러그인들의 실행에 관련된 설정들을 지정한다.
- build 밑으로 다수의 플러그인들을 설정할 수 있다.
<plugins>
- 플러그인 설정자로 여타 maven구성요소와 같이 <groupId>,<artifactId>,<version>를 가진다.
- <plugin>은 실행 시 옵션인 <configuration> 과 언제 실행될지에 대한 설정인 <execution>으로 구분된다.
<configuration>
- execution설정이나 기본 바인딩등으로 플러그인의 goal이 실행될 때의 실행옵션을 설정한다. 각 플러그인 별 옵션은 메뉴얼을 참조
- 플러그인 바로 밑에 구성된 <configuration>은 해당 플러그인내 여러 goal들 수행시 기본 옵션이며,
- 이와 반대로 <execution> 하위에 있는 옵션은 해당 execution내에서만 유효하며, default configuration을 오버라이딩한다.
- configuration에 들어가는 옵션들은 개별 goal에서 사용하는 옵션인지 여부에 관계없이 일단 설정 해 놓기만 하면, goal이 수행될 때, 자신의 옵션에 해당되는 값들만 알아서 찾아서 반영한다.
참고