# Maven
- 2002 https://maven.apache.org
- java build tool
- 빌드 = 컴파일 + 패키징 + 일괄작업
- JAVA_HOME needed
- 정형화된 작업 페이즈(phase)
- 자바 라이브러리 파일 의존성 관리
- 스프링 프레임워크와 밀접한 관계
## install
- sdkman
- [sdkman](/mib/sdkman) 추천
- `sdk install maven`
- JDK 설치 및 JAVA_HOME 환경변수 필요
- https://maven.apache.org 위치에서 `apache-maven-*.*.*-bin.zip` 다운로드
- download and unzip
- 환경변수 %Path%;\path\to\maven\bin
- mac
```
brew install maven
```
## run
- 환경변수 설정 후 새로 cmd창을 띄우고 `mvn -v` 실행
## POM
- Project Object Model
- 메이븐은 pom.xml 기반으로 실행
```xml
4.0.0
com.okdevtv.java
okdevtv
jar
1.0-SNAPSHOT
okdevtv
http://maven.apache.org
17
17
junit
junit
4.13.2
test
```
- Quick Start
```
mvn archetype:generate -DgroupId=com.okdevtv.java -DartifactId=okdevtv -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
```
- groupId : com.okdevtv.java, 프로젝트 패키지
- artifactId : okdevtv, 프로젝트 이름
- archetypeArtifactId : maven-archetype-quickstart, 템플릿 이름
- `mvn package`
- mvn 실행에 필요한 jar파일 다운로드
- 프로젝트 빌드(컴파일, 테스트, 패키징)에 필요한 jar파일 다운로드
- 두 번째 실행시 로컬에 저장된 jar 사용으로 빨라짐
## 메이븐 phase
- validate
- compile
- test
- **package**
- integration-test
- verify
- **install**
- deploy
## 기타
- clean
- site
- `mvn tomcat:run`
- `mvn spring-boot:run`
## 메이븐 저장소
- 로컬, 원격 저장소로 구분
- `~/.m2/repository` 기본 위치
- 라이브러리 정보는 http://mvnrepository.com 에서 검색 가능
## manual install
```sh
mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging=
```
## build file name
```
WhatEverYouLikey
```
## to gradle initializing
- pom.xml to build.gradle
- `gradle init`
## related
- [gradle](/mib/java/gradle)
- [maven deep dive](/mib/java/maven2)
- [maven etc](/mib/java/maven3)
- [maven sts](/mib/java/maven-sts)
## ref
- 5분 메이븐
- http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- Polyglot maven
- https://github.com/takari/polyglot-maven