mvnw 및 mvnw.cmd 파일의 목적은 무엇입니까?


257

나는 봄 부팅 응용 프로그램을 만들 때 나는 볼 수 있었다 mvnwmvnw.cmd프로젝트의 루트에 파일을 저장합니다. 이 두 파일의 목적은 무엇입니까?

답변:


345

이 파일은 Maven 래퍼 에서 가져온 것 입니다. Gradle 래퍼 와 비슷하게 작동합니다 .

이를 통해 경로에 Maven을 설치하고 표시하지 않고도 Maven 프로젝트를 실행할 수 있습니다. 찾지 못한 경우 올바른 Maven 버전을 다운로드합니다 (기본적으로 사용자 홈 디렉토리에 알고있는 한).

mvnw파일은 리눅스 (bash는) 용이고는 mvnw.cmdWindows 환경을위한 것입니다.


필요한 모든 Maven Wrapper 파일을 만들거나 업데이트하려면 다음 명령을 실행하십시오.

mvn -N io.takari:maven:wrapper

다른 버전의 maven을 사용하려면 다음과 같이 버전을 지정할 수 있습니다.

mvn -N io.takari:maven:wrapper -Dmaven=3.3.3

두 명령은 (는) 메이븐 필요 PATH(메이븐에 경로를 추가 binPath당신은 이미 당신이 사용할 수있는 프로젝트에 mvnw이있는 경우 시스템 변수에) ./mvnw대신 mvn명령에.


당신의 대답은 매우 도움이됩니다. maven 래퍼 설명서를 확인하십시오. 같은 목적으로 mvn사용할 수는 있지만 maven 작업에 명령을 사용 하고있었습니다 ./mvnw.
shaunthomas999

2
답변 해주셔서 감사합니다. 프로젝트가 처음 생성 될 때와 같이 언제 생성되는지 설명 할 수 있습니까? add remove dependencies / plugins 같은 pom을 변경하면 라인을 따라 업데이트됩니까?
Asanke

1
mvnw.cmd 파일을 추가 / 커밋해야합니까?
jpganz18

예, 물론입니다. maven을 추가로 설치하거나 PATH에 넣지 않고도 maven 빌드를 빠르게 실행할 수 있습니다.
닷지

1
답변 주셔서 감사합니다, 그것은 매우 도움이됩니다 ¿ 우리가 그런 식으로 작업 할 때 maven 설정 파일의 이식성에 대해 말씀해 주시겠습니까? Saludos와 다시 감사합니다.
Daniel Hernández

26

Command mvnw~/.m2/wrapper처음 사용시 기본적으로 다운로드되는 Maven을 사용합니다.

Maven이있는 URL은 각 프로젝트에서 .mvn/wrapper/maven-wrapper.properties다음 위치에 지정됩니다 .

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

Maven 버전을 업데이트하거나 변경하려면 다음을 호출하십시오 ( --non-recursive멀티 모듈 프로젝트를 기억하십시오 ).

./mvnw io.takari:maven:wrapper -Dmaven=3.3.9 

또는 .mvn/wrapper/maven-wrapper.properties수동으로 수정하십시오 .

Maven을 사용하여 처음부터 래퍼를 생성하려면 (이미 PATH실행 되어 있어야합니다 .

mvn io.takari:maven:wrapper -Dmaven=3.3.9 

5

메이븐 래퍼는 메이븐의 (또는 모두에서 메이븐을 설치하지 않은 사용자를위한) 특정 버전을 필요로 프로젝트를위한 탁월한 선택입니다. 운영 체제에 여러 버전을 설치하는 대신 프로젝트 별 래퍼 스크립트를 사용할 수 있습니다.

mvnw : 완전히 설치된 Maven 대신 사용되는 실행 가능한 Unix 쉘 스크립트입니다.

mvnw.cmd : Windows 환경을위한 것입니다


사용 사례

랩퍼는 다음과 같은 다른 운영 체제에서 작동해야합니다.

  • 리눅스
  • OSX
  • 윈도우
  • 솔라리스

그런 다음 유닉스 시스템에서 다음과 같은 목표를 실행할 수 있습니다.

./mvnw clean install

그리고 배치에 대한 다음 명령 :

./mvnw.cmd clean install

래퍼 속성에 지정된 Maven이 없으면 $USER_HOME/.m2/wrapper/dists시스템 의 폴더 에 다운로드되어 설치됩니다 .


메이븐 래퍼 플러그인

간단한 Spring Boot 프로젝트에서 자동 설치를위한 Maven Wrapper 플러그인 .

먼저 프로젝트의 기본 폴더로 이동하여 다음 명령을 실행해야합니다.

mvn -N io.takari:maven:wrapper

Maven의 버전을 지정할 수도 있습니다.

mvn -N io.takari:maven:wrapper -Dmaven=3.5.2

-N 옵션은 – 비 재귀를 의미하므로 랩퍼는 서브 모듈이 아닌 현재 디렉토리의 기본 프로젝트에만 적용됩니다.


2

지금까지 가장 좋은 옵션은 maven 컨테이너를 빌더 도구로 사용하는 것입니다. 이와 mvn.sh같은 스크립트로 충분합니다.

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "$@"

7
이것은 OP 질문에 대답하지 않고 단지 대안을 제안합니다
ahmedjaad

2
maven wrapper의 가장 기본적인 아이디어는이 프로젝트에 맞는 올바른 버전의 maven을 선언하는 것입니다. 그리고 보너스는 maven을 수동으로 설치할 필요가 없다는 것입니다. 접근 방식은 버전 문제를 해결하는 데 그리울뿐 아니라 로컬로 설치된 도구가 하나 더 필요합니다.
최대

2
또한 이것은 사용자 자신의 로컬 Maven 저장소를 docker 인스턴스에 마운트합니다. 일반적으로 이것은 루트로 실행되므로 dockerized maven 인스턴스가 작성한 것은 Linux에서 루트가 소유합니다. 반드시 바람직하지는 않습니다. 도커 빌드 인스턴스에 액세스 할 수있는 올바르게 설정된 넥서스 인스턴스가 덜 고통 스럽습니다. 특히 재현 가능한 빌드를 원할 경우 특히 그렇습니다.
Thorbjørn Ravn Andersen '12

그것은 오래 전 일 이었지만 여전히이 방법을 선호합니다. maven 버전에 대해서는 이미지 태그가 제공합니다 (Docker Hub에서 maven 페이지를보십시오). 루트 소유권에 관해서는 도커 데스크톱에서만 발생하지는 않지만 실제로 Linux 박스 (및 빌드 노드)에서도 발생합니다. 이 경우 작은 트릭으로 현재 UID를 "강제"(-u 인수) 할 수 있으므로 문제가 처리됩니다. 그러나이 방법은이 방법이 훨씬 뛰어납니다. 도커는 어쨌든, 특히 빌드 노드에서 전적으로 존재합니다.
André

1
(계속) 구식 Jenkins 설정 및 사고 방식은 이런 종류의 일로 이어집니다. 최신 CI / CD 도구는 그 반대입니다. 빌드 컨테이너 만 선택하면됩니다. 하지만 그건 내 의견 일뿐입니다.
André
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.