Quando criei um aplicativo Spring Boot, pude ver mvnw
e mvnw.cmd
arquivos na raiz do projeto. Qual é o objetivo desses dois arquivos?
Quando criei um aplicativo Spring Boot, pude ver mvnw
e mvnw.cmd
arquivos na raiz do projeto. Qual é o objetivo desses dois arquivos?
Respostas:
Esses arquivos são do wrapper Maven . Funciona de maneira semelhante ao wrapper Gradle .
Isso permite que você execute o projeto Maven sem ter o Maven instalado e presente no caminho. Ele baixa a versão correta do Maven se não for encontrada (tanto quanto eu sei por padrão no diretório inicial do usuário).
O mvnw
arquivo é para Linux (bash) e mvnw.cmd
é para o ambiente Windows.
Para criar ou atualizar todos os arquivos necessários do Maven Wrapper, execute o seguinte comando:
mvn -N io.takari:maven:wrapper
Para usar uma versão diferente do maven, você pode especificar a versão da seguinte maneira:
mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
Ambos os comandos exigem maven em PATH
(adicionar o caminho para maven bin
para Path
em Variáveis do sistema) se você já tem mvnw em seu projeto você pode usar ./mvnw
em vez de mvn
nos comandos.
O comando mvnw
usa o Maven que é baixado por padrão ~/.m2/wrapper
no primeiro uso.
O URL com o Maven é especificado em cada projeto em .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
Para atualizar ou alterar a versão do Maven, chame o seguinte (lembre-se de --non-recursive
para projetos com vários módulos):
./mvnw io.takari:maven:wrapper -Dmaven=3.3.9
ou apenas modificar .mvn/wrapper/maven-wrapper.properties
manualmente.
Para gerar o wrapper a partir do zero usando o Maven (é necessário que ele já esteja em PATH
execução:
mvn io.takari:maven:wrapper -Dmaven=3.3.9
O Maven Wrapper é uma excelente opção para projetos que precisam de uma versão específica do Maven (ou para usuários que não desejam instalar o Maven). Em vez de instalar muitas versões dele no sistema operacional, podemos apenas usar o script de wrapper específico do projeto.
mvnw: é um script shell executável do Unix usado no lugar de um Maven totalmente instalado
mvnw.cmd : é para ambiente Windows
Casos de Uso
O wrapper deve funcionar com diferentes sistemas operacionais, como:
Depois disso, podemos executar nossos objetivos assim para o sistema Unix:
./mvnw clean install
E o seguinte comando para o lote:
./mvnw.cmd clean install
Se não tivermos o Maven especificado nas propriedades do wrapper, ele será baixado e instalado na pasta $USER_HOME/.m2/wrapper/dists
do sistema.
Plugin Maven Wrapper
Plugin Maven Wrapper para fazer a instalação automática em um projeto simples do Spring Boot.
Primeiro, precisamos ir na pasta principal do projeto e executar este comando:
mvn -N io.takari:maven:wrapper
Também podemos especificar a versão do Maven:
mvn -N io.takari:maven:wrapper -Dmaven=3.5.2
A opção -N significa –non-recursive, para que o wrapper seja aplicado apenas ao projeto principal do diretório atual, não em nenhum sub-módulo.
De longe, a melhor opção hoje em dia seria usar um contêiner de maven como ferramenta de construção. Um mvn.sh
script como este seria suficiente:
#!/bin/bash
docker run --rm -ti \
-v $(pwd):/opt/app \
-w /opt/app \
-e TERM=xterm \
-v $HOME/.m2:/root/.m2 \
maven mvn "$@"
mvn
comando para operação maven, embora pudesse usar./mvnw
para o mesmo propósito.