maven

Maven 3.9+

Maven CLI 명령어 빠른 참조 — 프로젝트 라이프사이클 단계, 의존성 관리, 플러그인, 다중 모듈 리액터, 리포지터리 배포, 디버깅 — 자주 쓰는 옵션과 실전 예시까지 함께 정리했습니다.

명령어 34개

라이프사이클 단계

mvn validate

프로젝트 구조를 검증합니다 — 메타데이터 다운로드, `pom.xml` 파싱, 의존성 정합성 점검.

-N 루트 리액터만(하위 모듈 제외); -f <pom> 다른 POM 사용; -P<profile> profile 활성화

mvn validate
mvn compile

메인 `src/main/java`를 `target/classes`로 컴파일합니다. 설정된 JDK와 `maven-compiler-plugin`을 사용합니다.

-DskipTests; -T 4 병렬 빌드 스레드; -q 조용

mvn compile
mvn test

컴파일된 메인 + 테스트 소스에 대해 단위 테스트(Surefire)를 실행합니다. `failsafe`(통합 테스트)는 건너뜁니다 — 통합 테스트는 `mvn verify`를 사용하세요.

-Dtest=ClassName; -Dtest=Class#method; -DfailIfNoTests=false; -Dsurefire.useFile=false

mvn test -Dtest=UserServiceTest
mvn package

이전 단계를 모두 실행한 뒤 컴파일된 결과를 `target/` 아래 JAR / WAR / EAR로 패키징합니다.

-DskipTests; -Dpackaging=jar

mvn package -DskipTests
mvn verify

package과 통합 테스트(Failsafe)를 실행하고, 모든 것이 배포 가능한지 검증합니다. **install**이나 **deploy**는 수행하지 않습니다.

-DskipITs; -DskipTests

mvn verify -DskipITs
mvn install

verify를 실행한 뒤 생성된 아티팩트를 로컬 Maven 리포지터리(`~/.m2/repository`)에 복사해 다른 로컬 프로젝트가 의존할 수 있게 합니다.

mvn install -DskipTests
mvn deploy

`pom.xml`의 `<distributionManagement>`에 선언된 원격 리포지터리(Nexus / Artifactory / Sonatype를 통한 Maven Central)로 아티팩트를 빌드 후 푸시합니다.

-DskipTests; -P release 릴리스 profile 사용

mvn deploy -P release -DskipTests
mvn clean

`target/` 디렉터리를 삭제해 깨끗한 상태에서 시작합니다.

mvn clean
mvn clean install

`target/`을 비우고 `install`까지 실행합니다 — 가장 흔한 "처음부터 다시 빌드" 명령입니다.

-U 스냅샷 의존성 강제 업데이트

mvn clean install -U

의존성

mvn dependency:tree

해석된 의존성 트리(충돌 해소 포함)를 출력합니다 — 버전 차이로 인한 `NoSuchMethodError` 추적에 매우 유용합니다.

-Dincludes=<groupId>[:<artifactId>[:<version>]]; -Dverbose

mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
mvn dependency:resolve

라이프사이클을 실행하지 않고 모든 의존성을 로컬 리포지터리에 해석합니다.

mvn dependency:resolve
mvn dependency:analyze

선언된 `<dependencies>`와 실제 `import` / `package` 사용을 비교해, 사용되지 않거나 선언되지 않은 의존성을 표시합니다.

mvn dependency:analyze
mvn dependency:list

빌드에 해석된 모든 의존성을 `groupId:artifactId:type:version` 형식의 평문 줄로 나열합니다.

mvn dependency:list | grep slf4j
mvn versions:display-dependency-updates

설정된 리포지터리에 더 새로운 버전이 있는 모든 의존성을 나열합니다.

mvn versions:display-dependency-updates

다중 모듈

mvn -pl <module> <goal>

artifact ID로 지정한 하나 이상의 하위 모듈에 대해 goal을 실행합니다(쉼표로 구분).

-am 타깃이 의존하는 모듈도 함께 빌드

mvn -pl user-service,order-service -am test
mvn -pl <module> -am <goal>

지정한 모듈과 그것이 의존하는 모든 모듈을 빌드합니다. `-amd`(also-make-dependents)는 역방향입니다.

mvn -pl web -am package
mvn -T 4 <phase> / mvn -T 1C <phase>

병렬 리액터: `-T 4`는 4 스레드, `-T 1C`는 CPU 코어당 1 스레드를 사용합니다. 다중 모듈 빌드를 가속합니다.

mvn -T 1C clean install

리포지터리

mvn help:effective-pom

최종 병합 POM(super-POM + 부모 POM + 활성 profile + 현재 settings)을 단일 파일로 출력합니다 — 빌드 시점의 진실의 원천.

-Doutput=<file>

mvn help:effective-pom > effective.xml
mvn help:effective-settings

병합된 `~/.m2/settings.xml` + 글로벌 + CLI `--settings`를 출력합니다. 미러 / 자격 증명 해석 추적에 유용합니다.

mvn help:effective-settings -s ./settings.xml
mvn -s <settings.xml> <phase>

한 빌드에 대해 사용자 `settings.xml`을 재정의합니다 — 미러된 리포지터리를 사용하는 CI에서 유용합니다.

mvn -s ./.mvn/settings.xml deploy

플러그인

mvn <plugin>:<goal>

단일 플러그인 goal을 직접 실행합니다. 자주 쓰는 예: `compiler:compile`, `surefire:test`, `jar:jar`, `deploy:deploy`, `dependency:tree`.

-D<param>=<value> goal 매개변수; -X 디버그(매우 자세함)

mvn compiler:compile && mvn surefire:test -Dtest=*ServiceTest
mvn help:describe -Dplugin=<id>

플러그인의 모든 goal과 매개변수를 보여줍니다. `<id>`를 `groupId:artifactId`로 대체하세요.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin

프로파일

mvn -P<profile1>,<profile2> <phase>

`pom.xml` 또는 `settings.xml`의 `<profiles>` 아래에 선언된 하나 이상의 profile을 활성화합니다.

mvn -Pprod,fast test
mvn -P!<profile> <phase>

기본으로 활성화될 profile을 비활성화합니다.

mvn -P!javadoc package

디버깅

mvn -X <phase>

디버그 로깅을 활성화합니다 — 모든 플러그인 실행, 리포지터리 조회, 다운로드 URL을 출력합니다. 파일로 파이프하세요.

-e 오류 시 전체 스택 트레이스

mvn -X test > mvn-debug.log 2>&1
mvn -e <phase>

모든 실패에 대해 전체 스택 트레이스를 출력합니다. 최대 정보를 위해 `-X`와 함께 사용하세요.

mvn -e -X deploy
mvnDebug <phase>

Maven JVM의 1번 줄에서 JDWP 소켓(기본 포트 8000)에 중단점을 건 빌드를 시작해 디버거를 붙일 수 있게 합니다.

mvnDebug test

래퍼

./mvnw <phase>

Maven Wrapper를 통해 빌드를 실행합니다 — `.mvn/wrapper/maven-wrapper.properties`에 고정된 Maven 버전을 사용합니다. 항상 래퍼를 체크인하세요.

-Dmaven.version=<ver> 이번 실행에서만 Maven 업그레이드

./mvnw clean install
mvn wrapper:wrapper

Maven Wrapper 파일(`mvnw`, `mvnw.cmd`, `.mvn/wrapper/*`)을 생성/갱신합니다.

-Dmaven=<version> Maven 배포판 버전 고정

mvn wrapper:wrapper -Dmaven=3.9.6

기타

mvn --version

Maven 버전, JDK, OS, 로케일을 출력합니다.

mvn --version
mvn --help

모든 CLI 플래그와 지원되는 속성을 나열합니다.

mvn --help | head -40
mvn -B <phase>

배치 / 비-인터랙티브 모드 — 인터랙티브 프롬프트와 색상 출력을 비활성화합니다. CI에서 누락된 속성으로 멈추는 일을 피하려면 사용하세요.

mvn -B -ntp clean verify
mvn -ntp <phase>

새 전송 진행률 표시줄을 비활성화합니다(CI에서 권장 — 로그 노이즈를 줄이고 느린 미러에서의 CPU 스파이크를 피함).

mvn -B -ntp clean deploy
mvn -o <phase>

오프라인 모드 — 원격 리포지터리를 호출하지 않습니다. 필요한 아티팩트가 로컬에 없으면 빠르게 실패합니다.

mvn -o test

관련 명령어 치트시트

Maven 소개

Apache Maven은 2002년에 처음 등장한(원래 Jason van Zyl이 작성) 자바 프로젝트 관리 및 이해 도구입니다. 선언적인 `pom.xml`(Project Object Model)로 프로젝트를 모델링하고, 잘 정의된 빌드 라이프사이클을 8단계 기본 phase — `validate`, `compile`, `test`, `package`, `verify`, `install`, `deploy` — 로 실행합니다. Maven은 단일 리포지터리 레이아웃(`groupId:artifactId:version`)과 원격 리포지터리(Maven Central)에서 의존성 해석을 강제한 최초의 메인스트림 자바 빌드 도구입니다. 현재 안정 라인은 Maven 3.9+입니다. Maven은 아티팩트를 로컬 리포지터리(기본 `~/.m2/repository`)에 다운로드하고 전이적으로 해석하며, 옵션 스코프(`compile`, `provided`, `runtime`, `test`, `system`, `import`)를 지원합니다. 플러그인은 라이프사이클을 확장하며, 자주 쓰는 플러그인은 `maven-compiler-plugin`, `maven-surefire-plugin`, `maven-jar-plugin`, `maven-deploy-plugin`입니다. Profile(`-P`)은 환경별로 기본값을 재정의합니다. Maven은 소스 코드를 업로드하지 않으며, `deploy`는 `distributionManagement`에 설정된 아티팩트(jar/war/pom)만 전송합니다. 래퍼 스크립트(`mvnw` / `mvnw.cmd`)는 프로젝트별로 Maven 버전을 함께 제공해 툴체인을 고정합니다.

치트시트 버전 1.0.0