티스토리 뷰
안녕하세요 박스여우입니다. 오랜만의 포스팅 입니다. 이번에는 Maven에 대해서 알아보고자 합니다. 저도 평소 프로젝트 할때는 전혀 필요가 없었는데, 다른 오픈소스를 살펴보다 Maven이 필요해서 사용하다보니 Maven을 사용한 프로젝트가 오히려 더 편리하게 느껴져서 정리해 보고자 합니다.
■ Maven
프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만으로 개발하는것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 됩니다. 이 때 사용되는 라이브러리들의 수가 수십개가 훌쩍 넘어버리는 일이 발생해 이 많은 라이브러리들을 관리하는 것이 힘들어지는 경우가 종종 발생하곤 합니다. Maven은 이러한 문제를 해결해 줄 수 있는 도구 입니다. Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 줍니다.
Maven은 프로젝트의 전체적인 라이프 사이클을 관리하는 도구 이며, 많은 편리함과 이점이 있어 널리 사용되고 있습니다. 기존에는 Ant가 많이 사용되었지만 Maven이 Ant를 넘어서 더 많은 개발자들이 사용하게 되었고 비교적 최근에는 Gradle이 새롭게 나와 사용되고 있습니다(대표적으로는 Android Studio).
■ Maven 설치
해당 설치 방법은 윈도우를 기준으로 진행하겠습니다. 우선 maven 홈페이지(http://maven.apache.org/download.cgi)에 접속해서 apache-maven-3.3.9-bin.zip을 다운로드 받고 원하시는 곳에 압축을 해제해 주세요
그뒤 내 PC-속성-고급 시스템 설정-환경변수 에서 자신이 설치한 Maven의 경로를 MAVEN_HOME변수로 등록해 주시고, path변수의 맨 끝에 ;%MAVEN_HOME%\bin을 추가해 주시면 됩니다.
만약 JAVA_HOME 변수가 없으시다면 JAVA_HOME 역시 등록해 주셔야 합니다. JAVA_HOME 변수는 이름에서 알 수 있듯이 java가 설치된 경로를 입력해 주시면 됩니다. 설치가 정상적으로 되었다면 cmd를 키셔서 mvn --version 명령어를 통해 버전을 확인하실 수 있습니다.
이제 최종적으로 이클립스에 Maven을 적용하시려면 위의 사진처럼 http://www.eclipse.org/m2e/ 에 나와있는 Maven Plugin 다운로드 링크를 복사해 주세요.
그 뒤 이클립스에서 Help > Install New Software를 통해서 복사한 링크를 이용해 Maven plugin을 다운로드 하시면 됩니다.
■ Maven Lifecycle
maven에서는 미리 정의하고 있는 빌드 순서가 있으며 이 순서를 라이프사이클(Lifecycle)이라고 하며, 라이프 사이클의 각 빌드 단계를 Phase라고 합니다. 또한 이런 각 Phase들은 의존 관계를 가지고 있습니다.
IntelliJ IDEA를 통해 Maven 도구를 사용했을때의 모습입니다. Lifecycle에는 clean, validate, complie등 다양한 단계가 존재합니다. 아래는 그중 자주 쓰이는 단계들 입니다.
■ Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
■ Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
■ Compile : 프로젝트의 소스코드를 컴파일 하는 단계
■ Test : 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
■ Pacakge : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
■ Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
■ Install : 패키지를 로컬 저장소에 설치하는 단계
■ Site : 프로젝트 문서를 생성하는 단계
■ Deploy : 만들어진 package를 원격 저장소에 release 하는 단계
위의 9개의 Lifecycle 말고도 더 많은 종류의 LifeCycle이 있습니다. 이를 크게 Clean, Build, site 세 가지 Lifecycle로 나누고 있습니다. 각 단계를 모두 수행하는것이 아니라 원하는 단계까지만 수행할 수도 있으며 test 단계는 큰 프로젝트의 경우에 몇시간이 소요될수도 있으니 수행하지 않도록 스킵이 가능합니다.
■ Phase와 Goal
위에서 잠깐 언급했던 Phase는 Maven의 Build Lifecycle의 각각의 단계를 의미합니다. 각각의 Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 합니다.
메이븐에서 제공되는 모든 기능은 플러그인을 기반으로 동잡합니다. 메이븐은 라이프사이클에 포함되어있는 Phase마저도 플러그인을 통하여 실질적인 작업이 수행됩니다. 즉 각각의 Phase는 어떤 일을 할지 정의하지 않고 어떤 플러그인의 Goal을 실행할지 설정합니다.
메이븐에서는 하나의 플러그인에서 여러 작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능(명령)을 goal이라고 합니다. 플러그인의 goal을 실행하는 방법은 다음과 같습니다.
- mvn groupId:artifactId:version:goal(아래와 같이 생략 가능)
- mvn plugin:goal
■ POM - Project Object Model
pom은 Project Object Model의 약자로 이름 그대로 Project Object Model의 정보를 담고 있는 파일입니다. 이 파일에서 주요하게 다루는 기능들은 다음과 같습니다.
- 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등
- 빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인(goal)등 빌드와 관련된 설정
- 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
- POM 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
POM은 pom.xml파일을 말하며 Maven의 기능을 이용하기 위해서 POM이 사용됩니다. POM 설정 방법에 대해서는 다음 포스팅에서 자세하게 다루도록 하겠습니다.
'프로그래밍 > java' 카테고리의 다른 글
Maven - 다중 모듈 프로젝트 구성 (4671) | 2017.01.13 |
---|---|
GUI 프레임워크에서 단일 쓰레드만을 사용하는 이유 (5067) | 2016.12.27 |
XML을 JSON처럼 사용하기 (4702) | 2016.12.16 |
Interface 상수가 Anti-pattern인 이유 (435) | 2016.11.25 |
인터페이스(Interface)와 추상클래스(abstract) (417) | 2016.11.25 |