mvnd
- มาเวนแดมอน mvnd
mvnd
mvnd
จากแหล่งที่มาmvnd
mvnd
โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้ Maven build เร็วขึ้นโดยใช้เทคนิคที่รู้จักจาก Gradle และ Takari
ภาพรวมสถาปัตยกรรม:
mvnd
ฝัง Maven (ดังนั้นจึงไม่จำเป็นต้องติดตั้ง Maven แยกต่างหาก)
งานสร้างจริงเกิดขึ้นภายในกระบวนการพื้นหลังที่มีอายุการใช้งานยาวนานหรือที่รู้จักในชื่อ daemon
อินสแตนซ์ daemon หนึ่งรายการสามารถให้บริการคำขอต่อเนื่องกันหลายครั้งจากไคลเอ็นต์ mvnd
ไคลเอนต์ mvnd
เป็นไฟล์ปฏิบัติการดั้งเดิมที่สร้างขึ้นโดยใช้ GraalVM เริ่มต้นเร็วขึ้นและใช้หน่วยความจำน้อยลงเมื่อเทียบกับการเริ่ม JVM แบบดั้งเดิม
สามารถวาง daemon หลายตัวพร้อมกันได้ หากไม่มี daemon ที่ไม่ได้ใช้งานเพื่อรองรับคำขอ build
สถาปัตยกรรมนี้มีข้อดีดังต่อไปนี้:
JVM สำหรับการรันบิลด์จริงไม่จำเป็นต้องเริ่มต้นใหม่สำหรับแต่ละบิลด์
คลาสโหลดเดอร์ที่เก็บคลาสของปลั๊กอิน Maven จะถูกแคชไว้บนหลายบิลด์ ดังนั้นขวดปลั๊กอินจึงถูกอ่านและแยกวิเคราะห์เพียงครั้งเดียว ปลั๊กอิน Maven เวอร์ชัน SNAPSHOT ไม่ได้ถูกแคช
โค้ดเนทีฟที่สร้างโดยคอมไพเลอร์ Just-In-Time (JIT) ภายใน JVM จะถูกเก็บไว้เช่นกัน เมื่อเปรียบเทียบกับ Maven ในสต็อก การคอมไพล์ JIT ใช้เวลาน้อยลง ในระหว่างการสร้างซ้ำ รหัสที่ปรับให้เหมาะสมสำหรับ JIT จะพร้อมใช้งานทันที สิ่งนี้ไม่เพียงใช้กับโค้ดที่มาจากปลั๊กอิน Maven และ Maven Core เท่านั้น แต่ยังรวมถึงโค้ดทั้งหมดที่มาจาก JDK เองด้วย
mvnd
นำคุณสมบัติต่อไปนี้มาไว้เหนือหุ้น Maven:
ตามค่าเริ่มต้น mvnd
กำลังสร้างโมดูลของคุณแบบขนานโดยใช้แกน CPU หลายตัว จำนวนคอร์ที่ใช้จะได้รับจากสูตร Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
หากแผนผังต้นทางของคุณไม่รองรับบิลด์แบบขนาน ให้ส่ง -T1
ลงในบรรทัดคำสั่งเพื่อสร้างบิลด์ของคุณแบบอนุกรม
เอาต์พุตคอนโซลที่ได้รับการปรับปรุง: เราเชื่อว่าเอาต์พุตของการสร้างแบบขนานบน Maven สต็อกนั้นติดตามได้ยาก ดังนั้นเราจึงใช้มุมมองแบบไม่เลื่อนที่เรียบง่ายซึ่งแสดงสถานะของเธรดบิวด์แต่ละบรรทัดในบรรทัดที่แยกจากกัน นี่คือลักษณะที่ปรากฏบนเครื่องที่มี 24 คอร์:
เมื่อการสร้างเสร็จสิ้น เอาต์พุต Maven ที่สมบูรณ์จะถูกส่งต่อไปยังคอนโซล
mvnd
ถ้า SDKMAN! รองรับระบบปฏิบัติการของคุณได้ง่ายเหมือนๆ กัน
sdk install mvnd
หากคุณเคยใช้การติดตั้งด้วยตนเองในอดีต โปรดตรวจสอบให้แน่ใจว่าการตั้งค่าใน ~/.m2/mvnd.properties
ยังคงสมเหตุสมผล ด้วย SDKMAN! โดยทั่วไปไฟล์ ~/.m2/mvnd.properties
นั้นไม่จำเป็นเลย เนื่องจากทั้ง JAVA_HOME
และ MVND_HOME
ได้รับการจัดการโดย SDKMAN!
brew install mvndaemon/homebrew-mvnd/mvnd
หมายเหตุ: มีสองสูตร: mvnd
ที่ติดตั้งล่าสุด และ mvnd@1
ที่ติดตั้งบรรทัด 1.x
sudo port install mvnd
เรากำลังมองหาการสนับสนุนเพื่อสนับสนุน Chocolatey, Scoop หรือ asdf หากคุณคิดจะช่วยเรา…
หรือคุณสามารถตั้งค่าการทำให้เสร็จสมบูรณ์ได้ดังต่อไปนี้:
# 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
เป็นเชลล์เดียวที่รองรับในขณะนี้
ดาวน์โหลด ZIP ล่าสุดที่เหมาะกับแพลตฟอร์มของคุณจาก https://downloads.apache.org/maven/mvnd/
คลายซิปไปยังไดเร็กทอรีที่คุณเลือก
เพิ่มไดเร็กทอรี bin
ให้กับ PATH
ทางเลือก คุณสามารถสร้าง ~/.m2/mvnd.properties
และตั้งค่าคุณสมบัติ java.home
ในกรณีที่คุณไม่ต้องการตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME
ทดสอบว่า mvnd
ใช้งานได้หรือไม่:
$ 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 "
หากคุณใช้ Windows และเห็นข้อความว่า VCRUNTIME140.dll was not found
คุณจะต้องติดตั้ง vc_redist.x64.exe
จาก https://support.microsoft.com/en-us/help/2977003/the-latest-supported -visual-c-ดาวน์โหลด ดูข้อมูลเพิ่มเติมได้ที่ oracle/graal#1762
หากคุณใช้ macOS คุณจะต้องลบแฟล็กการกักกันออกจากไฟล์ทั้งหมดหลังจากแตกไฟล์เก็บถาวร:
$ xattr -r -d com.apple.กักกัน mvnd-xyz-darwin-amd64
mvnd
ได้รับการออกแบบมาเพื่อยอมรับตัวเลือกบรรทัดคำสั่งเดียวกันเช่น stock mvn
(บวกคุณสมบัติพิเศษบางอย่าง - ดูด้านล่าง) เช่น:
mvnd verify
mvnd
--status
แสดงรายการ daemons ที่กำลังรันอยู่
--stop
ฆ่า daemons ที่กำลังรันอยู่ทั้งหมด
mvnd --help
พิมพ์รายการตัวเลือกทั้งหมด
สามารถระบุการกำหนดค่าได้ผ่านไฟล์คุณสมบัติ Mvnd อ่านไฟล์คุณสมบัติจากตำแหน่งต่อไปนี้:
เส้นทางคุณสมบัติที่ระบุโดยใช้ตัวแปรสภาพแวดล้อม MVND_PROPERTIES_PATH
หรือตัวแปรระบบ mvnd.propertiesPath
เส้นทางคุณสมบัติท้องถิ่นซึ่งอยู่ที่ [PROJECT_HOME]/.mvn/mvnd.properties
เส้นทางคุณสมบัติผู้ใช้อยู่ที่: [USER_HOME]/.m2/mvnd.properties
เส้นทางคุณสมบัติของระบบอยู่ที่: [MVND_HOME]/conf/mvnd.properties
คุณสมบัติที่กำหนดไว้ในไฟล์แรกจะมีความสำคัญเหนือกว่าคุณสมบัติที่ระบุในไฟล์ที่มีอันดับต่ำกว่า
คุณสมบัติพิเศษบางประการไม่เป็นไปตามกลไกข้างต้น:
mvnd.daemonStorage
: คุณสมบัตินี้กำหนดตำแหน่งที่ mvnd จัดเก็บไฟล์ (บันทึกรีจิสทรีและ daemon) คุณสมบัตินี้สามารถกำหนดเป็นคุณสมบัติระบบบนบรรทัดคำสั่งเท่านั้น
mvnd.id
: คุณสมบัตินี้ถูกใช้ภายในเพื่อระบุ daemon ที่ถูกสร้างขึ้น
mvnd.extClasspath
: ตัวเลือกภายในเพื่อระบุ classpath ส่วนขยาย maven
mvnd.coreExtensions
: ตัวเลือกภายในเพื่อระบุรายการส่วนขยาย maven ที่จะลงทะเบียน
สำหรับรายการคุณสมบัติทั้งหมดที่มีอยู่ โปรดดูที่ /dist/src/main/distro/conf/mvnd.properties
mvnd
จากแหล่งที่มา git
มาเวน
ดาวน์โหลดและแตกไฟล์ GraalVM CE จาก GitHub
ตั้งค่า JAVA_HOME
เป็นตำแหน่งที่คุณคลายแพ็ก GraalVM ในขั้นตอนก่อนหน้า ตรวจสอบว่าเอาต์พุต java -version
เป็นไปตามที่คาดไว้:
$ $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)
ติดตั้งเครื่องมือ native-image
:
$ $JAVA_HOME /bin/gu install native-image
native-image
อาจต้องมีการติดตั้งซอฟต์แวร์เพิ่มเติม ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณ - ดูเอกสารประกอบ 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
โปรดทราบว่าหากคุณใช้ Windows เป็นระบบปฏิบัติการ คุณจะต้องมีข้อกำหนดเบื้องต้นต่อไปนี้สำหรับการสร้าง maven-mvnd
: เวอร์ชันของ Visual Studio ที่มีเวิร์กโหลด "การพัฒนาเดสก์ท็อปด้วย C++" และส่วนประกอบแต่ละรายการ "Windows Universal CRT SDK"
mvnd
$ cp -R dist/target/mvnd-[version] [target-dir]
จากนั้นคุณสามารถเพิ่ม [target-dir]/bin
ใน PATH
ของคุณและเรียกใช้ mvnd
เรายินดีที่จะปรับปรุง mvnd
ดังนั้นข้อเสนอแนะจึงยินดีเป็นอย่างยิ่ง!