Быстрее Maven - maven-mvnd

maven

верить какJavaВам как разработчику достаточноmavenКомпиляция идет медленно, но из-за исторических нагрузок, привычек использования и других проблем временно невозможно переключиться на другие более быстрые инструменты сборки.Здесь автор познакомит вас с более быстрым инструментом сборки.maven——maven-mvnd.

вводить

maven-mvndдаApache MavenКоманда узнала отGradleиTakariБолее быстрые инструменты сборки появились позже.mvndвстроенныйMaven, и именно по этой причине мы можем беспрепятственноMavenпереключить наmvnd(также не нужно устанавливать отдельноMaven).

В дизайне, вmvndОдин или несколько демонов будут созданы для обслуживания запросов на сборку для достижения эффекта параллельных сборок. Также вVMвыбор,mvndиспользовалGraalVMзаменить традиционныеJVM,по сравнению сGraalVMЗапускается быстрее и занимает меньше памяти.

Согласно документации, то же, что и традиционныйMavenпо сравнению сmvndИмеет следующие преимущества:

  • запустить сборкуJVMНет необходимости перезапускать для каждой сборки.
  • MavenЗагрузчики классов для классов плагинов кэшируются в нескольких сборках, плагиныjarsбудет прочитан и проанализирован только один раз.
  • JVMсерединаJITСгенерированный собственный код сохраняется. иMavenпо сравнению с,JITКомпиляция занимает меньше времени. При повторных сборкахJITОптимизированный код доступен сразу. Это касается не толькоMavenплагины иMavenКод для ядра, также работает отJDKвесь сам код.

по умолчанию,mvndиспользовать несколькоCPUПараллельные строительные блоки ядра. Количество используемых ядер находится по формулеMath.max(Runtime.getRuntime().availableProcessors() - 1, 1)данный. Если ваше исходное дерево не поддерживает параллельные сборки, передайте в командной строке-T1чтобы сделать вашу сборку серийной.

В то же время официальный24Динамический граф, работающий на машине с ядром:

24个内核的机器

Установить

Для установки mvnd официальная документация дает очень подробный туториал, рекомендуется сначала прочитать его:GitHub.com/apache/wipe ве….

Автор прошел черезHomebrewУстановлено, проверено практикойmacOS m1Установка не проблема. Однако следует отметить, что этот метод установленmvndВерсия0.7.1, а послеubuntuиmacOS m1Протестировал и обнаружил, что эта версия не поддерживаетJDK8(Возможно просто у автора проблемы с компом), а официальный пример показываетJDK11Это не проблема. существуетJDK8бегатьmvndКоманда выдает следующую ошибку:

~ % mvnd -v
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/mvndaemon/mvnd/client/DefaultClient has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

Предполагается, что исполняемый файл, загруженный таким образом, имеет старшую версию.JDKСкомпилированный, работающий на младших версиях не работает из-за отсутствия определенных методов или возможностей. Автору делать нечегоmaven-mvndПоследняя версия примечаний к обновлению, найденная на одномClosed issues:Different java versions for mvnd and maven #512, автор предлагает решение этой проблемыJAVA_HOMEУказанная версия установлена ​​наJDK11, и работаетmvndдобавить параметры в команду-Dmaven.compiler.release=8,Сейчас

mvnd -Dmaven.compiler.release=8 compile

Таким способом можно генерироватьJDK8Соответствующий скомпилированный код.

заissue #512Автор отвечаетmvndМинимальная поддерживаемая версияJDK8, но автор из0.5.2Я начал пробовать и все равно сообщил о той же ошибке... Возможно, есть определенная проблема с компьютером автора, потому что я видел изображение результата, опубликованное другими, показывающее, чтоJDK8Последняя версия также может быть установлена ​​и использована. Кроме того, если это все еще не работает, возможно, мы можем сгенерировать исполняемые файлы, вручную скомпилировав исходный код.Конкретные шаги есть на официальном сайте.readmeСоответствующие шаги были приведены выше.

использовать

в использовании сMavenИспользование точно такое же, просто замените командуmvnизменить наmvndВот и все. В реальных измерениях авторская локальная машина отличается от традиционнойMavenпо сравнению сmvndВремя, необходимое для сборки, является исходным1/2.

Суммировать

Автор статьи изmaven-mvndОписано введение, установка, использование и некоторые аномалии.Если читатели хотят узнать больше подробностей, они могут прочитатьофициальная документация. и, возможно, усиленныйMavenвсе еще не могу сравнитьGradle, но в контексте исторического багажа, привычек использования и т.д.MavenУкрепление на этот раз все еще очень ароматное.

Кроме того, мнения этой статьи представляют собой только личное мнение автора, если есть какие-либо ошибки, пожалуйста, вовремя укажите на ошибки.

Ссылаться на