Как увидеть все не потокобезопасные плагины в maven?

#java #maven #parallel-builds

#java #maven #параллельные сборки

Вопрос:

Я прочитал о конфигурации параллельной сборки maven в этом. Итак, как я могу отобразить все не потокобезопасные плагины? Есть ли что-то вроде команды «plugin-not-safe-list» в maven?

 REM something like that to display all p[lugins without @threadSafe  annotation
mvn help:plugin-not-safe-list
 

Ответ №1:

Теперь при сборке Maven предупреждает о плагинах, не помеченных как потокобезопасные:

 [WARNING] *****************************************************************
[WARNING] * Your build is requesting parallel execution, but project      *
[WARNING] * contains the following plugin(s) that have goals not marked   *
[WARNING] * as @threadSafe to support parallel building.                  *
[WARNING] * While this /may/ work fine, please look for plugin updates    *
[WARNING] * and/or request plugins be made thread-safe.                   *
[WARNING] * If reporting an issue, report it against the plugin in        *
[WARNING] * question, not against maven-core                              *
[WARNING] *****************************************************************
[WARNING] The following plugins are not marked @threadSafe in Root Maven Parent:
[WARNING] com.googlecode.maven-download-plugin:download-maven-plugin:1.3.0
[WARNING] Enable debug to see more precisely which goals are not marked @threadSafe.
[WARNING] *****************************************************************
 

Ответ №2:

Вы можете написать пользовательское правило для maven-enforcer-plugin и использовать его для запуска в вашем проекте maven.

Возможно, вы также захотите использовать mojo-executor для анализа plugin.xml файла для проверки его свойства «потокобезопасности».

Небольшая информация о том, когда и почему вы должны использовать вышеуказанное. Когда вы работаете в среде CI / CD и хотите использовать параллельную компиляцию через maven, вы должны постоянно следить за тем, чтобы ваши разработчики не добавляли не потокобезопасные плагины, чтобы обеспечить согласованность и корректность CI / CD. Для достижения этой цели вы можете использовать вышеупомянутый maven-envorcer-plugin с пользовательским правилом. Ваше пользовательское правило может использовать API плагинов Maven (maven project и т. Д.) Для поиска всех плагинов в проектах, А Затем использовать библиотеку mojo-executor для чтения threadSafe свойства каждого плагина (поскольку maven API этого не предоставляет). в mojo-executor lib есть инструменты для анализа plugin.xml файла плагина maven, в котором threadSafe находится свойство. После обнаружения вы можете завершить сборку maven.

Если вы хотите видеть только список не потокобезопасных плагинов, вы можете использовать тот же метод и просто перечислить плагины, threadSafe свойство которых равно false . Затем вы можете настроить maven-enforcer-plugin использование пользовательского правила (например, профиля проекта) и запустить его через командную строку в одной команде maven.

Кстати, что происходит, когда вы находите в своем проекте разработки не потокобезопасный плагин, а потокобезопасных альтернатив нет, — это другой вопрос, который также разрешим.

Комментарии:

1. «Кстати, что происходит, когда вы находите не потокобезопасный плагин в своем проекте разработки, а потокобезопасных альтернатив нет, это еще один вопрос, который также разрешим». не могли бы вы помочь дать подробное объяснение, как это решить?

2. Решение довольно простое, не уверен, почему для этого пока нет открытого исходного кода. Я написал это для своего предыдущего работодателя. Вы должны написать новый плагин-оболочку, который имеет семафор, запрещающий более одного параллельного выполнения одного и того же плагина, идентифицируемого {groupId} {artifactId} . Поскольку maven выполняет все плагины в одном и том же процессе, но в разных потоках параллельно — простой глобальный семафор должен сделать свое дело (одноэлементный). Затем для каждого не потокобезопасного плагина вы определяете его через плагин-оболочку

3. Можно сказать, что это не настоящий параллелизм, если один и тот же плагин будет выполняться последовательно, а не параллельно. Мои тесты показали, что в большом корпоративном проекте это все же лучше, чем альтернатива последовательному запуску всей сборки. Улучшение составило на 40% меньше времени сборки с 3 потоками. Существует ограничение на то, сколько потоков даст преимущество в течение всего времени, в зависимости от сложности локальной взаимозависимости модулей в проекте