새소식

300x250
2. 웹개발/환경설정 & etc

[Maven] 주요 개념 정리

  • -
728x90

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 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     : 위 파일 삭제

 

 

 


300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.