메이븐(maven) 이란?

Maven은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool)

자바 소스를 compile하고 package해서 deploy하는 일을 자동화 해주는 것이다.

  • 특징
    • 빌드절차 간소화
    • 동일 빌드 제공
    • 프로젝트 정보 제공
  • 다른 빌드와 차이점

  • ant와의 차이점 Ant가 비교적 자유도가 높다. 전처리, 컴파일, 패키징, 테스팅, 배포 가능

Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함하고 있음. (Build Tool + Project Management)

  • gradle과의 차이점

XML 대신 groovy 스크립트를 사용하여 동적인 빌드 가능.
maven은 멀티프로젝트에서 상속구조인데, gradle은 주입 방식이다. 멀티프로젝트에서 gradle이 더 적합


xml

  1. setting.xml - maven 세팅에 관련된 xml

  2. pom.xml

하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리에 “pom.xml”이라는 파일이 생성된다.

pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정한다.

  • xml 구성
    • 프로젝트 정보
    • 의존성 라이브러리 정보 (dependency)
    • 빌드 정보 (plugin)

Maven의 장점

  1. 핵심 라이브러리(JAR)와 의존 라이브러리의 관리가 편리하다.
  2. 모든 소프트웨어 프로젝트에 정형화(표준화)된 디렉터리 구조와 빌드 프로세스를 유지한다.
  3. Maven의 다양한 플러그인을 활용 가능하다.

  • 라이프 사이클
  1. clean : 빌드 시 생성되었던 산출물을 삭제
  2. pre-clean : clean 작업 전에 사전작업
  3. clean : 이전 빌드에서 생성된 모든 파일 삭제
  4. post-clean : 사후작업
  5. default : 프로젝트 배포절차, 패키지 타입별로 다르게 정의됌
  6. validate : 프로젝트 상태 점검, 빌드에 필요한 정보 존재유무 체크
  7. initialize : 빌드 상태를 초기화, 속성 설정, 작업 디렉터리 생성
  8. generate-sources : 컴파일에 필요한 소스 생성
  9. process-sources : 소스코드를 처리
  10. generate-resources : 패키지에 포함될 자원 생성
  11. compile : 프로젝트의 소스코드를 컴파일
  12. process-classes : 컴파일 후 후처리
  13. generate-test-source : 테스트를 위한 소스 코드를 생성
  14. process-test-source : 테스트 소스코드를 처리
  15. generate-test-resources : 테스팅을 위한 자원 생성
  16. process-test-resources : 테스트 대상 디렉터리에 자원을 복사하고 가공
  17. test-compile : 테스트 코드를 컴파일
  18. process-test-classes : 컴파일 후 후처리
  19. test : 단위 테스트 프레임워크를 이용해 테스트 수행
  20. prepare-package : 패키지 생성 전 사전작업
  21. package : 개발자가 선택한 war, jar 등의 패키징 수행
  22. pre-integration-test : 통합테스팅 전 사전작업
  23. integration-test : 통합테스트
  24. post-integration : 통합테스팅 후 사후작업
  25. verify : 패키지가 품질 기준에 적합한지 검사
  26. install : 패키지를 로컬 저장소에 설치
  27. deploy : 패키지를 원격 저장소에 배포
  28. site : 프로젝트 문서화 절차
  29. pre-site : 사전작업
  30. site : 사이트문서 생성
  31. post-site : 사후작업 및 배포 전 사전작업
  32. site-deploy : 생성된 문서를 웹 서버에 배포