Maven에 대해 알아보자.

yuJaeWu·2020년 7월 20일
2

유용한툴

목록 보기
1/7
post-thumbnail

메이븐이란?

메이븐은 프로젝트의 관리를 위한 빌드 도구이다.
더 풀어 얘기하자면 정처기에서도 볼수있는 '자동화 빌드도구' 라고 볼수있다.

예시를 들어서
여러명이서 작업하는 협업의 경우에 받거나 첨가해주어야 하는 파일이나 tool등을 써야할때
메이븐은 큰 도움을 준다.
(나같은 뉴비 4명이서 작업을 한다고 치자.)
A: 이거 쓸려면 저희 컴퓨터에 mybatis-spring이 필요하네요
B,C,D: 네 그럼 설치해놓을게요.

10분뒤...

이거 소스코드 그대로 임포트 하시면 될거에요.
B,D : 근데 왜 이게 임포트가 안되죠?

20분뒤...

A: 아 이거 mybatis-spring 버전이 다르네요.
B,D 그럼 그버젼 카톡으로 보내주시겠어요?

아주 극단적인 예지만 메이븐을 안쓰면 이런 사달이 날수가있다.
그렇다면 메이븐을 사용한다면?
밑의 소스코드를 보자.

pom.xml <-- (maven 컴파일소스)
.
.
<dependency>
<groupId>org.mybatis</groupId> 
<artifactId>mybatis-spring</artifactId> 
<version>1.2.0</version> 
</dependency> 
.
.

이런식으로 메이븐의 컴파일소스파일인 pom.xml에 원하는 툴의
정보와 버전만 적어주면 메이븐이 알아서 이 정보를 다운로드, 컴파일하고
개발환경내에 빌드시켜준다.

실로 편안한 방식이 아닐수없다.

메이븐의 장,단점

장점>

1. 모든 프로젝트의 디렉토리를 일관성이 있게 만들어줌
2. 아키타입을 통한 타 프로젝트 빌드에 적합한 환경을 배포가능
3. 라이브러리의 관리를 메이븐 하나로 의존가능케 함
4. 라이프사이클을 통한 테스트와 배포등 여러 기능을 제공

단점>

1. 레포지터리의 관리가 불편하다
2. 모든 과정을 pom.xml파일 하나로 해결하기에
   파일의 가독성이 떨어지고 길어진다
3. 디테일한 빌드기능의 부재
4. 프로젝트 관련 빌드기능을 제한함

메이븐의 라이프사이클(lifecycle)

위부터 순서대로 라이프사이클이 실행된다.

mvn process-resources: resource 디렉토리에 있는 내용을 해당된 파일로 복사

mvn compile:src/java: 밑의 모든 자바 소스를 컴파일해서 해당된 파일로 복사

mvn process-testResources,
mvn test-compile: 앞의 과정이 src/java라면 test/java의 내용을 해당된 파일(테스트)로 복사

mvn test: surefire: test의 실행으로 target/test-classes에 있는 테스트케이스의 단위테스트를 진행

mvn package: 해당된 프로젝트 밑에 jar, ear등 패키지파일을 생성하고 build의 finalName의 값을 사용

mvn install: 로컬 저장소 배포

mvn deploy: 원격 저장소 배포

mvn clean: 빌드 과정에서 생성된 디렉토리 내용 삭제

mvn site: site에 문서 사이트 생성

mvn site-deploy: 문서 사이트를 서버로 배포

추가


현재는 메이븐의 상위호환이 될수있는 gradle이 있다.
메이븐의 단점인 가독성과 늘어지는 pom.xml의 불편함을 캐어하는 모습과
스크립트의 빌드 능력도 메이븐과 큰 차이가 난다.
사용자의 의존성이 높아질수록 이 차이는 거대해질것이다.
다만 gradle을 사용하기에 앞서 언어를 공부해야하는 것과 익숙한 메이븐을 손에서
떼는것은 적지않은 이질감이 있기에 이 부분을 염두해두고 사용해보자 :)

profile
어중간한 성공보다는 확실한 실패가 좋다.

0개의 댓글