mvnd
- البرنامج الخفي Maven mvnd
mvnd
mvnd
من المصدرmvnd
mvnd
يهدف هذا المشروع إلى توفير تصميمات Maven أسرع باستخدام تقنيات معروفة من Gradle وTakari.
نظرة عامة على الهندسة المعمارية:
يقوم mvnd
بتضمين Maven (لذلك ليست هناك حاجة لتثبيت Maven بشكل منفصل).
تحدث عمليات البناء الفعلية داخل عملية خلفية طويلة الأمد، تُعرف أيضًا باسم البرنامج الخفي.
يمكن لمثيل خفي واحد أن يخدم عدة طلبات متتالية من عميل mvnd
.
عميل mvnd
هو برنامج أصلي قابل للتنفيذ تم إنشاؤه باستخدام GraalVM. يبدأ بشكل أسرع ويستخدم ذاكرة أقل مقارنة ببدء تشغيل JVM التقليدي.
يمكن إنشاء العديد من الشياطين بالتوازي إذا لم يكن هناك برنامج خفي خامل لخدمة طلب البناء.
توفر هذه البنية المزايا التالية:
لا يحتاج JVM لتشغيل الإصدارات الفعلية إلى البدء من جديد لكل إصدار.
يتم تخزين أدوات تحميل الفئات التي تحتوي على فئات مكونات Maven الإضافية مؤقتًا عبر إصدارات متعددة. وبالتالي تتم قراءة الجرار الإضافية وتحليلها مرة واحدة فقط. لا يتم تخزين إصدارات SNAPSHOT من مكونات Maven الإضافية في ذاكرة التخزين المؤقت.
يتم أيضًا الاحتفاظ بالكود الأصلي الذي ينتجه مترجم Just-In-Time (JIT) داخل JVM. بالمقارنة مع مخزون Maven، يتم قضاء وقت أقل في تجميع JIT. أثناء عمليات الإنشاء المتكررة، يتوفر الكود المحسّن لـ JIT على الفور. لا ينطبق هذا فقط على التعليمات البرمجية الواردة من مكونات Maven الإضافية وMaven Core، ولكن أيضًا على جميع التعليمات البرمجية الواردة من JDK نفسها.
يقدم mvnd
الميزات التالية بالإضافة إلى مخزون Maven:
بشكل افتراضي، يقوم mvnd
ببناء الوحدات النمطية الخاصة بك بالتوازي باستخدام مراكز وحدة المعالجة المركزية المتعددة. يتم تحديد عدد النوى المستخدمة من خلال الصيغة 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 -التنزيلات البصرية-ج. راجع Oracle/graal#1762 لمزيد من المعلومات.
إذا كنت تستخدم نظام التشغيل macOS، فستحتاج إلى إزالة علامات العزل من جميع الملفات بعد تفريغ الأرشيف:
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
تم تصميم mvnd
لقبول نفس خيارات سطر الأوامر مثل Stock mvn
(بالإضافة إلى بعض الإضافات - انظر أدناه)، على سبيل المثال:
mvnd verify
mvnd
--status
يسرد تشغيل الشياطين
--stop
يقتل جميع الشياطين قيد التشغيل
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 ملفاته (سجلات التسجيل والبرنامج الخفي). لا يمكن تعريف هذه الخاصية إلا كخاصية نظام في سطر الأوامر
mvnd.id
: يتم استخدام هذه الخاصية داخليًا لتحديد البرنامج الخفي الذي يتم إنشاؤه
mvnd.extClasspath
: خيار داخلي لتحديد مسار فئة الامتداد المخضرم
mvnd.coreExtensions
: خيار داخلي لتحديد قائمة الامتدادات المخضرمة للتسجيل
للحصول على قائمة كاملة بالخصائص المتاحة، يرجى الاطلاع على /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
، لذا نرحب بشدة بالتعليقات!