메이븐은 프로젝트의 관리를 위한 빌드 도구이다.
더 풀어 얘기하자면 정처기에서도 볼수있는 '자동화 빌드도구' 라고 볼수있다.
예시를 들어서
여러명이서 작업하는 협업의 경우에 받거나 첨가해주어야 하는 파일이나 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. 프로젝트 관련 빌드기능을 제한함
위부터 순서대로 라이프사이클이 실행된다.
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을 사용하기에 앞서 언어를 공부해야하는 것과 익숙한 메이븐을 손에서
떼는것은 적지않은 이질감이 있기에 이 부분을 염두해두고 사용해보자 :)