Maven? 메이븐? 이게 뭐야
Maven : 자바 프로젝트 관리 도구(Apache사에서 만든 Build Tool)
빌드(Build) : 프로젝트를 위해 작성한 java코드, xml, jar 등을 JVM이나 톰캣같은 WAS(Web Application Server)가 인식할 수 있는 구조로 패키징하는 과정 및 결과물.
<Maven>
- pom.xml파일을 통해 정형화된 빌드 시스템으로 프로젝트를 관리.
- 플러그인을 구동해주는 프레임워크. 모든 작업은 플러그인에서 수행한다.
메이븐은 여러 플러그인으로 구성되어 있으며, 각가의 플러그인은 하나 이상의 goal을 포함한다.
메이븐은 여러 goal을 묶어서 라이프사이클 phase로 만들고 실행한다.
- 내가 사용하는 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 줌.
- 필요한 라이브러리를 pom.xml에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받음
- 프로젝트의 전체적인 라이프 사이클을 관리하는 도구
개발자는 프로젝트에 사용할 라이브러리를 pom.xml에 dependency로 정의만 해두면 메이븐이 repository에서 검색해서 자동으로 추가해준다. 참조하고있는 library까지 모두 찾아서 추가해준다(의존성 전이).
라이프 사이클?
- maven은 프로젝트 생성에 필요한 단계(phase)들을 Build Lifecycle이라고 정의하고 default, clean, site로 표준 정의함
(phase는 실행단위로서 goal과 바인딩된다.)
phase들은 서로 의존 관계를 가지고 있다. 해당 phase가 수행이 되려면 이전 phase들이 모두 수행되어야 한다.
- 라이프 사이클 종류
- clean : 빌드 시 생성되었던 산출물을 삭제
- pre-clean : clean 작업 전에 사전작업
- clean : 이전 빌드에서 생성된 모든 파일 삭제
- post-clean : 사후작업
- default : 프로젝트 배포절차, 패키지 타입별로 다르게 정의됨.
- validate : 프로젝트 상태 점검, 빌드에 필요한 정보 존재유무 체크
- initialize : 빌드 상태를 초기화, 속성 설정, 작업 디렉터리 생성
- generate-sources : 컴파일에 필요한 소스 생성
- process-sources : 소스코드를 처리
- generate-resources : 패키지에 포함될 자원 생성
- compile : 프로젝트의 소스코드를 컴파일
- process-classes : 컴파일 후 후처리
- generate-test-source : 테스트를 위한 소스 코드를 생성
- process-test-source : 테스트 소스코드를 처리
- generate-test-resources : 테스팅을 위한 자원 생성
- process-test-resources : 테스트 대상 디렉터리에 자원을 복사하고 가공
- test-compile : 테스트 코드를 컴파일
- process-test-classes : 컴파일 후 후처리
- test : 단위 테스트 프레임워크를 이용해 테스트 수행
- prepare-package : 패키지 생성 전 사전작업
- package : 개발자가 선택한 war, jar 등의 패키징 수행
- pre-integration-test : 통합테스팅 전 사전작업
- integration-test : 통합테스트
- post-integration : 통합테스팅 후 사후작업
- verify : 패키지가 품질 기준에 적합한지 검사
- install : 패키지를 로컬 저장소에 설치
- deploy : 패키지를 원격 저장소에 배포
- site : 프로젝트 문서화 절차
- pre-site : 사전작업
- site : 사이트문서 생성
- post-site : 사후작업 및 배포 전 사전작업
- site-deploy : 생성된 문서를 웹 서버에 배포
<pom.xml의 element>
- <groupId> : 프로젝트의 패키지 명칭
- <artifactId> : artifact 이름, groupId 내에서 유일해야 한다.
- <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId>
- <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>
참조 문서 : https://sjh836.tistory.com/131 (이 글 토대로 작성)