본문 바로가기

개발이야기

메이븐 (maven) 사용법

메이븐은 선언형 빌드 도구다. 프로젝트를 빌드하는 순차적 단계를 정의하는 대신 프로젝트는 pom.xml 파일의 POM(Project Object Model)을 사용하여 기술한다

 

validate

POM 유효성을 검증한다.

 

generate-sources

소스 코드를 생성한다.

 

process-source, generate-resources, process-resources

소스 코드 생성과 함께 소스 생성 결과를 처리하고, 리소스를 생성(프로퍼티 파일, 이미지, 사운드 등이나 패키지의 엘리먼트 처럼 코드가 아닌 것)하며, 처리할 수 있다.

 

compile

컴파일러 플러그인의 목표는 루트 디렉토리에 있는 모든 소스 코드를 컴파일하는 것이다.

플러그인은 컴파일 소스 루트에 디렉토리를 추가할 수 있다. - 예를 들어 하이버네이트3 플러그인의 hbm2java .hbm.xml 파일로 소스 코드를 생성하고, 생성된 소스를 target/generated-source에 넣는다. 그런 다음 하이버네이트3 플러그인은 target/generated-source 디렉토리를 컴파일 소스 루트에 추가한다. 자동으로 생성된 소스는 컴파일 과정에 포함된다.

process-classes

컴파일 결과의 후처리 과정이다. 애노테이션 사용등을 처리한다.

 

generate-test-sources, process-test-sources, generate-test-resources, process-test-resources

process-resources 단계에 있는 generate-source와 비슷한 기능을 가진다.
단위 테스트와 그에 필요한 모든 리소스를 생성할 수 있다.

 

test-compile

컴파일러 플러그인을 다시 호출해서 testCompile 대상인 테스트 리소스를 컴파일한다.
testCompile
의 목표는 테스트 소스 루트 디렉토리에 있는 모든 소스 코드를 컴파일한다
.
하지만 src/test/java에 있는 모든 소스가 컴파일된다고 말할 수는 없다. 왜냐하면 플러그인은 이전의 생명주기 4단계에서 단위 테스트를 위한 소스 코드를 생성할 기회가 있기 때문이다.(그리고 테스트 소스 루트에 디렉토리를  추가하기도 한다.)

 

test

Surefile 플러그인은 클래스에 대한 test-compile 결과를 스캔한다. 클래스는 JUnit TestCase 클래스를 확장한 것이며, JUnit을 사용해 단위 테스트를 실행한다.

 

prepare-package

패키징할 프로젝트에 필요한 내용을 준비한다.

 

package

기본적으로 jar 형식으로 패키징한다.(별도의 설정이 없을 경우)
jar
패키징의 기본 작동은 ${artifactId}-${version}.jar라는 이름으로 파일을 생성하는 것이다. 필요한 경우 원하는 대로 이름을 설정할 수 있지만 일반적으로 커스터마이징 하지 않는 편이 낫다.

 

pre-integration-test, integration-test, post-integration-test

보통 단위 테스트에서는 데이터베이스를 연결하지 않는다. 단계적인 통합 테스트를 하려면 이 세 단계를 사용해서 관련된 목표를 정의해야 한다.

 

verify

verify 목표는 생성된 결과의 품질을 확인하는 것이다.

 

install

install은 프로젝트에서 artifact를 찾을 수 있도록 로컬 저장소에 artifact  설치하는 것이다.

 

deploy

프로젝트 artifact, 사이트, 리포트를 외부 저장소로 발행할 때 사용한다.

 

설정보다 관례 (convention over configuration) 라는 아이디어를 따르면

엄청난 수의 설정 파일을 만들지 않고도 매우 복잡한 웹 애플리케이션을 만들 수 있다.

최근 루비 온 레일스 같은 프레임워크와 함께 매우 유명했졌다.

 

설정보다 관례란 특정 그룹의 사람들이 특별히 애플 노트북을 선호하는 이유라고 말 할 수 있다.

혹은 운전하기 전에 액셀레이터와 브레이크 패달이 각각 오른쪽, 왼쪽에 있는 이유를 알기 위해 자동차 설명서를 읽을 필요가 없는 것과도 같다.

 

메이븐에서는 소스코드, 단위 테스트, 사이트 문서 그리고 설정이 어디에 위치해 있는지 빌드 도구에 명시하려고 시간을 낭비하지 않아도 된다.



메이븐의 표준 디렉토리 구조

pom.xml

           모든 프로젝트는 반드시 하나의 pom.xml 파일을 가진다.

 

src/main/java

           artifact

 

src/main/resources

           프로젝트 리소스가 포함되는 위치이다.

           리소스에는 자바 소스 코드가 아닌 log4j.properties, hibernate.cfg.xml, 지역화 파일 같은 것들이 있다.

 

src/testjava

           단위 테스트 루트 디렉토리이다.

 

src/site/

           사이트 문서는 여기에서 구성한다.

 

target/

           소스, 바이트 코드, 혹은 최종 프로덕트이든 빌드로 만든 모든 것은 target에 있게 된다.

           target은 빌드 프로덕트이기 때문에 삭제하거나 버전 관리 시스템에서 제외 될 수 있다.

 

그 외에 src/main/webapp, src/main/config, src/main/assembly, src/main/filters 와 같은 표준 디렉토리도 있다.

예를 들어, WAR artifact를 생성한다면 src/main/webapp는 웹 애플리케이션의 document root가 된다.

'개발이야기' 카테고리의 다른 글

[개발][이클립스] 단축키  (0) 2018.09.20
[인프라] 아파치 사용법  (0) 2018.09.20
[인프라] 아마존 RDS root 권한 획득  (1) 2018.09.20