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

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



답변

이 파일은 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명령에.


답변

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 


답변

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

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


답변

지금까지 가장 좋은 옵션은 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 "$@"


답변