maven 정리
Intro
냉무
메이븐이란?
- 자바용 프로젝트 관리 도구
- 아파치 앤트의 대안으로 나타남 (ant -> maven -> gradle)
- 아파치 라이선스로 배포되는 오픈 소스 소프트웨어
메이븐 라이프 사이클
maven에서는 미리 정의하고 있는 빌드 순서가 있으며 이 순서를 라이프사이클(Lifecycle)이라고 하며, 라이프 사이클의 각 빌드 단계를 Phase라고 합니다.
또한 이런 각 Phase들은 의존 관계를 가지고 있습니다.
- Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
- Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
- Compile : 프로젝트의 소스코드를 컴파일 하는 단계
- Test : 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
- Pacakge : package를 실행하면 compile, test-compile, test 순으로 실행된 다음 jar, war파일이 target 디렉토리 아래에 생성된다.
- Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
- Install : 로컬 리파지토리에 패키지를 배포 한다.
- Site : 프로젝트 문서를 생성하는 단계
- Deploy : 만들어진 package를 원격 저장소에 release 하는 단계
메이븐 Phase와 Goal
Phase는 Maven의 Build Lifecycle의 각각의 단계를 의미합니다.
각각의 Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 합니다.
메이븐 레포지토리 수동배포
기본적으로 pom.xml의 디펜던시에 추가된 라이브러리를 다운받아오지만 사설라이브러리(oracle,dev-on..)들은 라이선스등과 같은 이슈로 직접 다운로드 받지 못한다. 이럴경우 라이브러리를 수동으로 받아 메이븐 명령어로 수동 배포를 진행 후 pom.xml에 기술한다.
# maven 명령어
$ mvn install:install-file -Dfile="C:\DEV_RPS\lib\신규.jar" -DgroupId=“???" -DartifactId=“???" - Dversion=“???" -Dpackaging="jar"
메이븐 스코프
- maven은 dependency 엘리먼트 하위의 scope 엘리먼트를 통해 포함하려는 라이브러리의 범위를 지정할 수 있습니다.
- Maven 3에서는 다음의 여섯가지 옵션을 지원하고 있습니다.
-
compile : 기본 scope이다. 만약 dependency에 아무것도 입력하지 않았다면 기본적으로 입력되는 scope이다. 이 옵션은 프로젝트의 모든 classpath에 추가된다(테스트 중이건 런타임 중이건 상관없이).
-
provided : 이 옵션은 compile과 매우 비슷하지만, 실행시 의존관계를 제공하는 JDK나 Web Container(tomcat 같은)에 대해서 적용된다. 예를 들어 Java Enterprise Edition Web application을 개발할때 Servlet API나 Java EE API들은 “provided” scope로 지정해야한다. 왜냐하면 Servlet API같은 경우는 Servlet Container 자체에서 지원해 주기 때문에(Tomcat 같은 경우는 ${tomcat home directory}/lib 디렉토리에 있는 Servlet 라이브러리를 사용) 컴파일시 또는 테스트시에는 필요하지만 실행시에는 필요하지 않기 때문이다.
-
runtime : 컴파일 시에는 필요하지 않지만 실행시에 사용되는 경우 사용한다. 이 옵션은 런타임, 테스트 시 classpath에 추가 되지만, 컴파일시에는 추가 되지 않는다.
-
test : 일반적인 경우에는 필요하지 않고 테스트시에만 필요한 경우 사용한다.
-
system : 해당 jar를 포함해야 한다고 명시적으로 입력 하는 것을 제외하고는 provided와 유사하다. 선언된 artifact들은 항상 사용가능하지만 Maven의 central repository에서 찾아서 가져오는 것은 아니다.
-
import : Maven 2.0.9 이상의 버전에서 지원하는 scope로서, 이 scope는
섹션에서 pom의 의존관계에 대해 사용된다. 지정된 pom이 해당 pom의 영역에 있는 의존관계로 대체됨을 뜻한다.
댓글남기기