🍀 Maven
- Maven은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool)
- 프로젝트를 진행하면서 필연적으로 발생하는 다양한 작업들을 편리하게 관리할 수 있는 빌드 자동화 도구
ex: 라이브러리 관리(JSTL 다운받고 등록하고 .. ) 라이브러리 버전 관리(다른버전으로 다시 다운받고 .. 다시 등록하고 .. ) 프로젝트 버전 관리(프로젝트 업데이트하면 이름 바꿔주고 .. 관리하고..) 프로젝트 배포 관리(프로젝트의 배포판 생성하기)
- 프로젝트 내부의 pom.xml을 통해 전체 프로젝트를 관리할 수 있는 프로그램이다
🌼 POM(Project Object Model)
- 프로젝트 객체 모델
- 해당 프로젝트에 대한 여러가지 설정 및 의존성등의 정보들을 담고 있다
- 프로젝트 전체에 대한 명세서
🌼 pom.xml
- <groupId> : 이 프로젝트의 그룹 아이디 (패키지 이름에 사용했던 회사 이름)
- <artifactId> : 이 프로젝트의 프로젝트명(패키지에서 쓸 이름)
- <name> : 이 프로젝트의 프로젝트 이름(대소문자 버전)
- <packaging> : 이 프로젝트의 빌드 결과가 무엇일지 설정
- <version> : 이 프로젝트의 현재 버전
- <properties> : pom.xml 내부에서 사용할 변수 등록
- <dependencies> : 이 프로젝트를 구성하는 데에 필요한 다른 프로젝트들(이 프로젝트가 의존하는 다른 프로젝트들)
여기에 등록한 프로젝트들은 메이븐이 자동으로 다운로드하여 관리해준다
프로젝트 빌드(BuildPath)에도 자동으로 포함시킨다
- <dependency> : 의존하는 프로젝트의 pom 정보를 적어 등록하는 곳
해당 프로젝트의 <groupId>, <artifactId>, <version>등을 적어 이 프로젝트에 포함시킨다
<scope>를 설정하여 이 프로젝트에서 어느정도 범위까지 필요한지 설정할 수 있다
🌼 <scope>의 종류
- compile : 프로젝트를 컴파일 할 때 필요한 의존성, 컴파일 당시에도 사용되고, 프로젝트 배포시에도 포함된다(기본값)
- runtime : 컴파일할 때는 필요 없지만 해당 프로젝트를 실행할 때는 필요한 의존성, 프로젝트 배포시에 포함된다
- provided : 컴파일 할 때는 필요하지만 실행할 때는 필요없는 의존성(JSP 등), 프로젝트 배포시에는 포함되지 않는다
- test : 테스트 단계에서만 필요한 의존성, 컴파일 및 배포에 모두 포함되지 않는다
🌼 Maven의 원격 레포지토리와 로컬 레포지토리
- Maven <dependencies>에 등록한 모든 프로젝트들을 중앙 원격 레포지토리에서 다운받는다
- 다운받은 프로젝트들은 user/.m2/repository/groupId/artifactId/...폴더에 버전별로 보관된다(로컬 레포지토리)