mvnd
- Daemon Maven mvnd
mvnd
opsi spesifikmvnd
dari sumbermvnd
mvnd
Proyek ini bertujuan untuk menyediakan pembangunan Maven yang lebih cepat menggunakan teknik yang dikenal dari Gradle dan Takari.
Ikhtisar arsitektur:
mvnd
menyematkan Maven (jadi tidak perlu menginstal Maven secara terpisah).
Pembangunan sebenarnya terjadi di dalam proses latar belakang yang berumur panjang, alias daemon.
Satu instance daemon dapat melayani beberapa permintaan berturut-turut dari klien mvnd
.
Klien mvnd
adalah executable asli yang dibuat menggunakan GraalVM. Ini dimulai lebih cepat dan menggunakan lebih sedikit memori dibandingkan dengan memulai JVM tradisional.
Beberapa daemon dapat dibuat secara paralel jika tidak ada daemon yang menganggur untuk melayani permintaan pembangunan.
Arsitektur ini memberikan keuntungan sebagai berikut:
JVM untuk menjalankan build sebenarnya tidak perlu memulai lagi untuk setiap build.
Pemuat kelas yang menyimpan kelas plugin Maven di-cache pada beberapa build. Stoples plugin dibaca dan diurai hanya sekali. Versi SNAPSHOT dari plugin Maven tidak di-cache.
Kode asli yang dihasilkan oleh kompiler Just-In-Time (JIT) di dalam JVM juga disimpan. Dibandingkan dengan stok Maven, lebih sedikit waktu yang dihabiskan untuk kompilasi JIT. Selama pembuatan berulang, kode yang dioptimalkan JIT segera tersedia. Hal ini berlaku tidak hanya untuk kode yang berasal dari plugin Maven dan Maven Core, tetapi juga untuk semua kode yang berasal dari JDK itu sendiri.
mvnd
menghadirkan fitur-fitur berikut di atas stok Maven:
Secara default, mvnd
membuat modul Anda secara paralel menggunakan beberapa inti CPU. Jumlah inti yang digunakan diberikan oleh rumus Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
. Jika pohon sumber Anda tidak mendukung pembangunan paralel, teruskan -T1
ke baris perintah untuk membuat serial pembangunan Anda.
Output konsol yang ditingkatkan: kami yakin bahwa output dari build paralel pada stok Maven sulit untuk diikuti. Oleh karena itu, kami menerapkan tampilan non-rolling sederhana yang menunjukkan status setiap thread build pada baris terpisah. Ini adalah tampilannya pada mesin dengan 24 core:
Setelah pembangunan selesai, keluaran Maven lengkap diteruskan ke konsol.
mvnd
Jika SDKMAN! mendukung sistem operasi Anda, semudah
sdk install mvnd
Jika Anda pernah menggunakan instalasi manual, pastikan pengaturan di ~/.m2/mvnd.properties
masih masuk akal. Dengan SDKMAN!, file ~/.m2/mvnd.properties
biasanya tidak diperlukan sama sekali, karena JAVA_HOME
dan MVND_HOME
dikelola oleh SDKMAN!.
brew install mvndaemon/homebrew-mvnd/mvnd
Catatan: Ada dua rumus: mvnd
yang menginstal terbaru, dan mvnd@1
yang menginstal baris 1.x.
sudo port install mvnd
Kami sedang mencari kontribusi untuk mendukung Chocolatey, Scoop atau asdf. Jika Anda ingin membantu kami…
Secara opsional, Anda dapat mengatur penyelesaian sebagai berikut:
# ensure that MVND_HOME points to your mvnd distribution, note that sdkman does it for you
$ echo ' source $MVND_HOME/bin/mvnd-bash-completion.bash ' >> ~ /.bashrc
bash
adalah satu-satunya shell yang didukung saat ini.
Unduh ZIP terbaru yang sesuai untuk platform Anda dari https://downloads.apache.org/maven/mvnd/
Buka zip ke direktori pilihan Anda
Tambahkan direktori bin
ke PATH
Secara opsional, Anda dapat membuat ~/.m2/mvnd.properties
dan mengatur properti java.home
jika Anda tidak ingin repot mengatur variabel lingkungan JAVA_HOME
.
Uji apakah mvnd
berfungsi:
$ mvnd --version
Maven Daemon 0.0.11-linux-amd64 (native)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13
Default locale: en_IE, platform encoding: UTF-8
OS name: " linux " , version: " 5.6.13-200.fc31.x86_64 " , arch: " amd64 " , family: " unix "
Jika Anda menggunakan Windows dan melihat pesan bahwa VCRUNTIME140.dll was not found
, Anda perlu menginstal vc_redist.x64.exe
dari https://support.microsoft.com/en-us/help/2977003/the-latest-supported -visual-c-unduhan. Lihat Oracle/graal#1762 untuk informasi lebih lanjut.
Jika Anda menggunakan macOS, Anda harus menghapus tanda karantina dari semua file setelah membongkar arsip:
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
mvnd
dirancang untuk menerima opsi baris perintah yang sama seperti stock mvn
(ditambah beberapa tambahan - lihat di bawah), misalnya:
mvnd verify
mvnd
opsi spesifik --status
mencantumkan daemon yang berjalan
--stop
membunuh semua daemon yang sedang berjalan
mvnd --help
mencetak daftar opsi lengkap
Konfigurasi dapat disediakan melalui file properti. Mvnd membaca file properti dari lokasi berikut:
jalur properti yang disediakan menggunakan variabel lingkungan MVND_PROPERTIES_PATH
atau variabel sistem mvnd.propertiesPath
jalur properti lokal yang terletak di [PROJECT_HOME]/.mvn/mvnd.properties
jalur properti pengguna yang terletak di: [USER_HOME]/.m2/mvnd.properties
jalur properti sistem yang terletak di: [MVND_HOME]/conf/mvnd.properties
Properti yang ditentukan dalam file pertama akan diutamakan daripada properti yang ditentukan dalam file dengan peringkat lebih rendah.
Beberapa properti khusus tidak mengikuti mekanisme di atas:
mvnd.daemonStorage
: properti ini mendefinisikan lokasi di mana mvnd menyimpan file-filenya (registrasi dan log daemon). Properti ini hanya dapat didefinisikan sebagai properti sistem pada baris perintah
mvnd.id
: properti ini digunakan secara internal untuk mengidentifikasi daemon yang sedang dibuat
mvnd.extClasspath
: opsi internal untuk menentukan classpath ekstensi maven
mvnd.coreExtensions
: opsi internal untuk menentukan daftar ekstensi maven yang akan didaftarkan
Untuk daftar lengkap properti yang tersedia, silakan lihat /dist/src/main/distro/conf/mvnd.properties.
mvnd
dari sumber git
Maven
Unduh dan ekstrak GraalVM CE dari GitHub
Setel JAVA_HOME
ke tempat Anda membongkar GraalVM pada langkah sebelumnya. Periksa apakah keluaran java -version
sesuai yang diharapkan:
$ $JAVA_HOME /bin/java -version
openjdk version " 11.0.9 " 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
Instal alat native-image
:
$ $JAVA_HOME /bin/gu install native-image
native-image
mungkin memerlukan instalasi perangkat lunak tambahan tergantung pada platform Anda - lihat dokumentasi native-image
.
mvnd
$ git clone https://github.com/apache/maven-mvnd.git
$ cd maven-mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
Harap perhatikan bahwa jika Anda menggunakan Windows sebagai sistem operasi, Anda memerlukan prasyarat berikut untuk membangun maven-mvnd
: versi Visual Studio dengan beban kerja "Pengembangan desktop dengan C++" dan komponen individual "Windows Universal CRT SDK".
mvnd
$ cp -R dist/target/mvnd-[version] [target-dir]
Kemudian Anda cukup menambahkan [target-dir]/bin
ke PATH
Anda dan menjalankan mvnd
.
Kami dengan senang hati meningkatkan mvnd
, jadi masukan sangat kami harapkan!