안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Maven 주요 개념 정리 ] 입니다. :)
# Ant vs Maven
1. Ant는 비교적 자유도가 높은 편
(Ant : 전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)
2. Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있음.
(Build Tool + Project Management)
#Maven 기능
1. 빌드
2. 문서화
3. 리포팅
4. 의존관계 관리
5. 소스코드 관리
6. 릴리즈
7. 배포
#Maven 사용시 이점
1. 편리한 의존관계 라이브러리 관리
2. 모든 프로젝트가 일관된 디렉토리 구조와 빌드 프로세스를 유지
- 메이븐은 이미 정형화된 프로젝트 구저와 빌드 명령 제공
3. 메이븐이 제공하는 다양한 플러그인을 활용
- 플러그인을 이용하여 다양한 통합개발 환경, 프로젝트 자동변환, 데이터베이스 통합 등 가능
4. 전시적으로 사용할 프로젝트 템플릿을 만들어 배포
# Maven Pattern
1. Build : Source/Test Code Compile
▼
2. Package : WAR/JAR ETC package
▼
3. Test : Unit Test, Test Result Check
▼
4. Report : Build, Package, Test 결과 정리 및 문서화(Report 생성)
▼
5. Release : Build 후 생성된 결과물(Artifact)를 Local / Remote 환경(저장소)에 배포
# Maven Key Concept / Keyword
[MAIN]
1. Plugin : Goal의 집합(Goals) / 메이븐에서 실질적인 실행을 담당
2. LifeCycle : 기본 라이프사이클 / Clean 라이프 사이클 / Site 라이프사이클
3. Dependency : 라이브러리 의존성 관리(의존성 전이 / 스코프 등)
4. Profile : 배포 환경 정의(환경에 따른 배포 내용 정의 가능)
5. POM(Project Object Model)
[그 밖에]
1. Archetype : Template Project를 지칭
2. Phase : 라이프사이클의 각 단계를 지칭
(compile / test / package / install / deploy)
# Maven 설정파일
1. settings.xml
- 메이븐 빌드 툴과 관련한 설정파일
- MAVEN_HOME/conf 디렉토리에 위치 (메이븐 설치 시 기본 제공)
- settings.xml의 <localRepository> 설정
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
** 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드 하는위치(로컬저장소)의 기본 설정 'USER_HOME/.m2/repository' 인데 settings.xml의 <localRepository>에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다.
2. pom.xml
- 메이븐 기반 프로젝트에서 사용하는 설정파일
- 기본 구성요소 4가지 : 프로젝트 기본정보, 빌드 설정, 프로젝트 관계 설정, 빌드 환경
- 메이븐은 빌드와 관련된 정보를 프로젝트 객체 모델(Project Object Model)로 정의
- groupId + artifactId의 값이 유일한 값이어야함
- 대부분의 프로젝트는 다른 라이브러리 또는 프로젝트와 의존 관계를 가지며, 각 프로젝트 사이에서 상속 관계를 가지는 경우도 있다.
> pom.xml예
* project : pom.xml 파일의 최상위 엘리먼트
* modelVersion : POM 모델의 버전, 최근버전 4.0.0, 수정x, 버전이 바뀌지 않는 한 건드릴 일 없다.
* groupId : 프로젝트를 생성하는 조직의 고유 아이디, 일반적으로 도메인 이름
* artifactId : 프로젝트를 식별하는 유일한 아이디
예) com.gotdamn 이라는 groupId를 사용하고 있는 조직에 여러개의 프로젝트가 있을 수 있음
* packaging : 프로젝트를 어떤 형태로 패키징 할지 결정 (jar,war,ear,pom 등)
* version : 프로젝트의 현재 버전,
개발 완료 된 버전-1.0,2.0 , 개발 중 SNAPSHOT을 접미사로 사용, SNAPSHOT을 사용하면 라이브러리를 다른 방식으로 관리함
* name : 프로젝트 이름
* url : 프로젝트 사이트가 있다면 사이트 URL을 등록한다.
* dependencies : 프로젝트와 의존관계에 있는 라이브러리를 관리함
(메이븐 프로젝트의 dependency 검색: http://search.maven.org/ )
## Maven Project Structure Example
* [PROJECT]
|- src
| |--main
| |--java
| |--resources
| |--test
|- pom.xml
# Maven Plugin Reference URL
(http://maven.apache.org/plugins/index.html)
- resource : http://maven.apache.org/plugins/maven-resources-plugin/
- clean : http://maven.apache.org/plugins/maven-clean-plugin/
- site : http://maven.apache.org/plugins/maven-site-plugin/
- install : http://maven.apache.org/plugins/maven-install-plugin/
- compiler : http://maven.apache.org/plugins/maven-compiler-plugin/
- deploy : http://maven.apache.org/plugins/maven-deploy-plugin/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
######################################### ## Maven CommandLine Interface Example ## ######################################### 1. 기본 실행 mvn [option] [phase] [plugin:goal] - 기본적으로 option, phase, plugin 등 조합하여 사용 가능 ex) mvn clean test mvn clean package mvn clean install mvn clean dependency:copy-dependencies package 2. clean 라이프사이클, clean phase 실행 mvn clean 3. 기본 라이프사이클 - 각 phase는 이전 단계 및 관련 플러그인의 실행과 관련있음. mvn compile test package install deploy 4. 최상위 pom.xml 내용 확인 - 기본적으로 최상위 pom.xml의 내용을 모두 상속받기 때문에, 확인 필요함. mvn help:effective-pom 5. 의존 라이브러리 리소스 복사(PROJECT#1/targer/dependency) mvn dependency:copy-dependencies 6. 의존성 트리 내용 mvn dependency:tree
7. eclipse 플러그인 사용 예제 mvn eclipse:eclipse : .classpath, .project 파일 생성(이클립스 import 가능) mvn eclipse:clean : 위 파일 삭제
|