Mvnw ve mvnw.cmd dosyalarının amacı nedir?


257

Bir Spring Boot uygulaması oluşturduğumda projenin kökündeki dosyaları mvnwve mvnw.cmddosyaları görebiliyordum . Bu iki dosyanın amacı nedir?

Yanıtlar:


345

Bu dosyalar Maven sarıcıdan . Gradle sargıya benzer şekilde çalışır .

Bu, Maven'i yolda kurup sunmadan Maven projesini çalıştırmanıza izin verir. Bulunmazsa doğru Maven sürümünü indirir (varsayılan olarak kullanıcı ana dizininizde bildiğim kadarıyla).

mvnwDosya Linux (bash) içindir ve mvnw.cmdWindows ortamında içindir.


Gerekli tüm Maven Wrapper dosyalarını oluşturmak veya güncellemek için aşağıdaki komutu yürütün:

mvn -N io.takari:maven:wrapper

Maven'in farklı bir sürümünü kullanmak için sürümü aşağıdaki gibi belirleyebilirsiniz:

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

Her iki komut üzerinde maven gerektiren PATH(maven yolunu eklemek biniçin Pathzaten kullanabilirsiniz projenizde mvnw varsa Sistem Değişkenler'i) ./mvnwyerine mvnkomutları.


Cevabınız çok faydalı. Maven sarıcı belgelerini kontrol ediyorum. Aynı amaç için mvnkullanabilsem de maven işlemi için komut kullanıyordum ./mvnw.
shaunthomas999

2
Cevap için teşekkürler. Bunun ne zaman oluşturulduğunu açıklayabilir misiniz, başlangıçta bir proje oluşturduğunuzda olduğu gibi? Kaldırma bağımlılıkları / eklentileri eklemek gibi pom'unuzda değişiklik yaptığınızda hat boyunca güncellenir mi?
Asanke

1
ve mvnw.cmd dosyalarını eklemeniz / işlemeniz gerekir mi?
jpganz18

Evet tabi ki. maven'i fazladan yüklemenize veya PATH'a sahip olmanıza gerek kalmadan maven yapınızı hızlı bir şekilde çalıştırmanızı sağlar.
Dodge

1
Cevabınız için çok teşekkürler, çok yararlı ¿Bu şekilde çalışırken maven ayarları dosyalarının taşınabilirliği hakkında bize bir şeyler söyleyebilir misiniz? Saludos ve tekrar teşekkürler.
Daniel Hernández

26

Komut mvnw, varsayılan ~/.m2/wrapperolarak ilk kullanımda indirilen Maven'i kullanır.

Maven ile URL her projede şu adreste belirtilir .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 sürümünü güncellemek veya değiştirmek için aşağıdakileri çağırın ( --non-recursiveçok modüllü projeler için unutmayın ):

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

veya yalnızca .mvn/wrapper/maven-wrapper.propertiesmanuel olarak değiştirin .

Maven kullanarak sıfırdan sarıcı oluşturmak için (zaten PATHçalışır durumda olması gerekir :

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

5

Maven Sarıcı Maven (veya hiç Maven'i yüklemek istemeyen kullanıcılar için) Belirli bir sürümü gerekir projeler için mükemmel bir seçimdir. Birçok sürümünü işletim sistemine yüklemek yerine, sadece projeye özgü sarmalayıcı komut dosyasını kullanabiliriz.

mvnw: tam yüklü bir Maven yerine kullanılan yürütülebilir bir Unix kabuk betiği

mvnw.cmd : Windows ortamı için


Kullanım Örnekleri

Sarıcı aşağıdakiler gibi farklı işletim sistemleriyle çalışmalıdır:

  • Linux
  • OSX
  • pencereler
  • Solaris

Bundan sonra, Unix sistemi için hedeflerimizi bu şekilde yürütebiliriz:

./mvnw clean install

Ve Batch için aşağıdaki komut:

./mvnw.cmd clean install

Sarıcı özelliklerinde belirtilen Maven'imiz yoksa $USER_HOME/.m2/wrapper/dists, sistem klasörüne indirilir ve yüklenir .


Maven Wrapper eklentisi

Maven Wrapper eklentisi , basit bir Spring Boot projesinde otomatik kurulum yapmak için.

İlk olarak, projenin ana klasörüne gitmeli ve şu komutu çalıştırmalıyız:

mvn -N io.takari:maven:wrapper

Maven sürümünü de belirleyebiliriz:

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

-N seçeneği –no-özyinelemeli anlamına gelir, böylece sarmalayıcı herhangi bir alt modülde değil, yalnızca geçerli dizinin ana projesine uygulanır.


2

Şimdiye kadar en iyi seçenek, bir oluşturucu aracı olarak bir maven kabı kullanmak olacaktır. Bunun mvn.shgibi bir komut dosyası yeterli olacaktır:

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

7
Bu OP sorusuna cevap vermiyor, sadece bir alternatif öneriyor
ahmedjaad

2
Maven sargısının en temel fikri, bu proje için maven'in doğru sürümünü beyan etmektir. Bir bonus, maven'i manuel olarak kurma ihtiyacından kaçınır. Yaklaşımınız sadece sürüm sorununu özlemekle kalmaz, aynı zamanda yerel olarak yüklenmiş bir araç daha gerektirir.
Maksimum

2
Ayrıca, kullanıcıların kendi yerel Maven havuzunu docker örneğine bağladığını unutmayın. Bu genellikle root olarak çalışır, bu yüzden dockerized maven örneği tarafından yazılan her şey Linux altında root'a aittir. Bu mutlaka istenmez. Docker yapı örneği için erişilebilen düzgün kurulumlu bir nexus örneği buldum, özellikle tekrarlanabilir yapıları istiyorsanız.
Thorbjørn Ravn Andersen

Uzun zaman önceydi, ama yine de bu yolu tercih ediyorum. Maven sürümü hakkında, resim etiketleri sağlar (sadece Docker Hub'daki maven sayfasına bakın). Kök sahipliğine gelince, bu sadece docker masaüstünde gerçekleşmez - ancak aslında linux kutularında (ve tabii ki yapı düğümleri) olur. Küçük bir hile bu durumda mevcut UID'yi "zorlayabilir" (-u argümanı), bu yüzden problem ele alınır. Ama bu yaklaşımın büyüklüğünü daha iyi bulduğum anlamına geliyor. Docker zaten her yerde mevcut, özellikle yapı düğümlerinde.
André

1
(devam ediyor) Eski okul Jenkins kurulumu ve zihniyeti bu tür şeylere yol açıyor. Modern CI / CD araçları tam tersini yapar: sadece bir yapı kabı seçersiniz. Ama bu sadece benim görüşüm.
André
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.