mvnd
Maven Daemon 1.0+Maven Daemon (mvnd) 명령어 모음 — 상주 JVM 데몬 프로세스로 `mvn`을 감싼 래퍼. 모든 mvn 하위 명령을 그대로 사용할 수 있으며, 데몬 관리 명령(--status / --stop / --shutdown)을 추가로 제공합니다.
명령어 29개
데몬 관리
mvnd --status실행 중인 모든 mvnd 데몬을 나열: ID, JDK 홈, 버전, 가동 시간, 유휴 시간, 완료/실행 중인 빌드 수. 스크립트에서는 `-o plain`으로 일반 텍스트 출력이 가능합니다.
-o plain|json 출력 형식
mvnd --statusmvnd --stop유휴 상태인 데몬 하나를 정지합니다. `--status`로 표시된 데몬 ID를 전달해야 합니다. `-y`가 없으면 확인 프롬프트가 표시됩니다.
-y 확인 생략
mvnd --stop 7d3c4e5f-a1b2-4c3d-9e0f-1234567890abmvnd --stop-all실행 중인 모든 mvnd 데몬을 종료합니다. JDK 업그레이드, `JAVA_HOME` 변경, 또는 항상 콜드 스타트에서 빌드하고 싶을 때 사용합니다.
mvnd --stop-allmvnd --shutdown`--stop-all`의 별칭. 동작은 동일하며, mvnd 1.0+을 명시 대상으로 하는 스크립트에서 이 이름을 권장합니다.
mvnd --shutdownmvnd --versionmvnd 버전, 런처의 Java 버전, 데몬이 사용할 Maven 버전을 출력합니다. 어떤 데몬이 생성 또는 재사용될지 확인할 때 유용합니다.
mvnd --versionmvnd --create-daemon기존 데몬을 재사용하지 않고 현재 JDK와 Maven 버전으로 새 데몬을 강제로 만듭니다. `JAVA_HOME`을 바꾼 직후 오래된 데몬이 낡은 클래스 데이터를 들고 있는 것을 피할 때 유용합니다.
--user <name> JVM 설정 프리셋
mvnd --create-daemon clean install라이프사이클 단계 (mvn 드롭인)
mvnd validate프로젝트 검증: `pom.xml` 파싱, 스냅샷 다운로드, 의존성 정합성 점검. `mvn validate`과 완전히 동일합니다.
mvnd validatemvnd compile`src/main/java`를 `target/classes`로 컴파일합니다. 데몬이 이미 워밍업된 상태라면 `mvn compile`보다 훨씬 빠릅니다 — JIT가 자주 쓰는 플러그인을 이미 최적화했기 때문입니다.
-DskipTests; -T 4 병렬 스레드 수 (mvn으로 전달)
mvnd compilemvnd testSurefire 단위 테스트를 실행합니다. 테스트는 여전히 새 JVM을 포크하므로 테스트 격리는 변함없고, 속도 이점은 Maven 쪽에서만 발생합니다.
-Dtest=ClassName; -Dtest=Class#method; -DfailIfNoTests=false
mvnd test -Dtest=UserServiceTestmvnd package이전 단계를 모두 실행한 뒤 출력을 `target/*.jar`(또는 `.war`/`.ear`)로 패키징합니다.
-DskipTests; -Dpackaging=jar
mvnd package -DskipTestsmvnd installverify를 실행하고, 생성된 산출물을 `~/.m2/repository/`에 설치해 다른 로컬 프로젝트가 의존할 수 있도록 합니다.
mvnd install -DskipTestsmvnd clean install`target/`을 비우고 `install`까지 한 번에 실행하는 "처음부터 재빌드" 표준 명령입니다. 데몬이 `clean`을 건너 살아남기 때문에 mvnd가 mvn보다 훨씬 빠릅니다.
-U 스냅샷 의존성을 강제 업데이트
mvnd clean install -Umvnd deploy빌드 후 산출물을 `pom.xml`의 `<distributionManagement>`에 선언된 원격 리포지토리로 게시합니다. 의미는 `mvn deploy`과 동일합니다.
-DskipTests; -P release release 프로파일 사용
mvnd deploy -P release -DskipTests데몬 튜닝
mvnd -Dmvnd.daemonStorage=<path> <phase>데몬 레지스트리 디렉터리를 덮어씁니다(기본 `~/.m2/mvnd/`). 프로젝트별 경로를 지정해 각 워크트리에 독립된 데몬 풀을 둘 수 있습니다.
mvnd -Dmvnd.daemonStorage=.mvnd clean installmvnd -Dmvnd.idleTimeout=<duration> <phase>데몬이 유휴 상태에서 자동으로 종료되기까지의 시간. 기본 3h. `30s` / `5m` / `2h` / `1d`를 받습니다.
mvnd -Dmvnd.idleTimeout=30m testmvnd -Dmvnd.maxHeap=<size> <phase>데몬 JVM 힙을 제한합니다. 기본 2G. 다른 도구와 메모리를 나눠야 한다면 줄이고, 대용량 멀티모듈에서 OOM이 발생하면 늘립니다.
mvnd -Dmvnd.maxHeap=4G clean installmvnd -Dmvnd.threads=<n> <phase>동시에 유지할 최대 데몬 수. 기본값 = CPU 코어 수. 줄이면 유휴 메모리를 절약하고, 늘리면 다양한 JDK/Maven 조합의 병렬 운용을 허용합니다.
mvnd -Dmvnd.threads=2 testmvnd -Dmvnd.scheduler=simple|async <phase>데몬 선택 정책. `simple`(기본)은 가장 최근에 사용한 데몬을 선택하고, `async`는 Maven/JDK 조합별로 데몬을 하나씩 유지하며 매칭되는 데몬으로 디스패치합니다. JDK를 자주 바꿔야 한다면 `async`를 권장합니다.
mvnd -Dmvnd.scheduler=async install빌드 제어 (mvn으로 전달)
mvnd -DskipTests <phase>테스트 실행은 건너뛰되 테스트 코드는 컴파일합니다. mvn과 동일 — mvnd는 모든 `-D` 시스템 속성을 그대로 전달합니다.
mvnd -DskipTests packagemvnd -T <n> <phase> / mvnd -T 1C <phase>병렬 reactor 빌드: `-T 4`는 4 스레드, `-T 1C`는 CPU 코어당 1 스레드. 워밍업된 데몬과 결합하면 `-T 1C clean install`은 mvnd에서 가장 빠른 전체 빌드 구성이 됩니다.
mvnd -T 1C clean installmvnd -B -ntp <phase>배치 모드 / 비대화형 / 전송 진행 표시 끄기. CI에서 권장하는 호출 형식이며, mvnd가 진행 표시줄과 ANSI 색상을 끄기 때문에 로그 파서가 안정적으로 동작합니다.
mvnd -B -ntp clean verifymvnd -X <phase>디버그 로그. 각 플러그인 실행과 리포지토리 조회를 모두 출력합니다. 출력이 크므로 파일로 리디렉션하는 것을 권장합니다.
-e 오류 시 전체 스택 트레이스 출력
mvnd -X test > mvnd-debug.log 2>&1mvnd -pl <module> -am <phase>지정한 모듈과 그것이 의존하는 모듈을 모두 빌드합니다. `-amd`(also-make-dependents)는 반대 방향입니다. 플래그는 mvn과 완전히 동일합니다.
mvnd -pl user-service -am testmvnd -s <settings.xml> <phase>이번 빌드에서 `~/.m2/settings.xml`을 지정한 파일로 덮어씁니다. CI에서 미러 리포지토리나 배포 자격 증명을 가리킬 때 사용합니다.
mvnd -s ./.mvn/settings.xml deploymvnd -o <phase>오프라인 모드 — 로컬 리포지토리에 산출물이 없으면 즉시 실패합니다. mvnd는 이 플래그를 그대로 전달하고, 데몬은 자체적으로 의존성 해석만 수행합니다.
mvnd -o test진단
mvnd --log <phase>데몬 측 Maven 빌드 로그를 포어그라운드로 스트리밍합니다(기본적으로 `~/.m2/mvnd/<daemon-id>/daemon.log`에 기록). 데몬 안에서만 발생하는 실패를 디버깅할 때 유용합니다.
mvnd --log testmvnd --purge데몬 레지스트리 디렉터리(기본 `~/.m2/mvnd/`)를 완전히 삭제합니다. JDK/Maven 메이저 업그레이드로 바이트 레이아웃이 바뀐 뒤에는 오래된 데몬이 원인 불명의 오류를 일으킬 수 있으므로, 먼저 purge 후 다시 생성하세요.
mvnd --purgemvnd --helpmvnd 전용 플래그(`--status` 계열)를 모두 나열합니다. 완전한 Maven 플래그(`-D` / `-P` / `-T` / `-pl` 등)는 `mvn --help`을 참조하세요. mvnd는 이 플래그들도 모두 그대로 전달합니다.
mvnd --help래퍼
./mvnw <phase>Maven Wrapper를 통해 빌드를 실행합니다. mvnd를 투명하게 사용하려면 wrapper를 `mvndw`로 심볼릭 링크/이름 변경하거나, `.mvn/maven.config`에서 mvnd를 호출하도록 설정합니다.
./mvnw clean install관련 명령어 치트시트
상표 및 사용 안내
본 명령줄 도구 치트시트 모음은 오픈 커뮤니티 참고 자료입니다. 본 문서에서 언급되는 도구의 명칭, 로고, 상표(예: Git™, Docker™, Kubernetes®, kubectl, PostgreSQL®, MySQL®, Redis™, MongoDB®, Linux™, PowerShell™, Vim™ 등)는 각 권리자의 자산이며, 본 문서에서는 식별 및 참고 목적のみで 사용됩니다.
본 치트시트의 모든 내용은 독립적으로 작성된 단순화된 자체 완결형 참고 자료이며, 어떠한 공식 문서와도 계열·인정·출처 관계가 없습니다. 명령 목록, 플래그 설명, 예제는 모두 저자의 원본 단순화이며, 권위 있는 정보가 필요한 경우 각 도구의 공식 문서를 참조하시기 바랍니다.
명령 구문 및 옵션 플래그는 도구 버전에 따라 다를 수 있습니다. 표시되는 버전 태그는 안정 릴리스를 반영하며, 다른 버전에서는 동작이 다를 수 있습니다. 본 치트시트는 상표권자의 어떠한 선호나 권장도 의미하지 않습니다.
상표권자 또는 저작권자가 사이트의 일부 내용에 대해 권리 침해가 있다고 판단하시는 경우 [email protected]으로 이메일을 보내 주십시오. 유효한 권리 증명을 받은 후 합리적인 기간 내에 관련 내용을 수정하거나 삭제하겠습니다.
본 사이트는 사이트 정보의 이용으로 인해 발생하는 어떠한 직접적 또는 간접적 손해에 대해서도 법적 책임을 지지 않습니다.
Maven Daemon 소개
Apache Maven Daemon(mvnd)은 표준 `mvn` CLI의 래퍼로, Peter Palaga가 시작한 프로젝트입니다. Apache Software Foundation에서 오랜 기간 인큐베이션을 거쳐 2024년 첫 안정 버전인 1.0.0을 출시했습니다. mvnd는 백그라운드에서 하나 이상의 상주 JVM 데몬을 유지하고, 각 빌드 요청을 해당 데몬에 디스패치합니다. Maven 3.x와 동일한 `pom.xml`, `~/.m2/repository`, 플러그인, 라이프사이클을 그대로 재사용하므로 진정한 drop-in 대체 도구입니다. `mvnd compile`은 `mvn compile`과 정확히 동일하게 동작하지만 빌드 속도만 훨씬 빠릅니다. 속도 향상은 세 가지 요소에서 비롯됩니다. (1) JVM은 한 번만 시작되어 여러 빌드에 걸쳐 재사용되므로, `mvn`이 호출마다 부담하는 1~3초 JVM 시작 비용이 사라집니다. (2) mvnd는 데몬용 JDK로 GraalVM을 사용해 워밍업 시간과 상주 메모리 사용량을 줄입니다. (3) 단일 데몬 안에서 다중 모듈 빌드를 병렬 실행할 수 있습니다. 속도 향상 폭은 소규모 단일 모듈 프로젝트의 약 2배부터, 대규모 멀티모듈 reactor의 10배 이상까지 다양합니다. mvnd는 데몬 레지스트리를 `~/.m2/mvnd/`(기본 `~/.m2/repository/`와 별도)에 저장해 서로 다른 JDK의 데몬을 공존시킬 수 있습니다. 데몬은 설정 가능한 유휴 타임아웃(기본 3시간) 이후 자동으로 종료됩니다. 모든 처리는 로컬에서 이루어지며, 소스 코드나 산출물은 외부로 전송되지 않습니다.
치트시트 버전 1.0.0