Определение количества ядер процессора во время сборки Maven
В настоящее время я использую плагин Maven Failsafe, чтобы выполнять раздвоенное выполнение тестов (параллельное выполнение нескольких в отдельных JVM).
Я вручную устанавливаю переменную forkCount, основываясь на количестве ядер, которые есть на моей машине, но я бы хотел, чтобы Maven автоматически определил это, что позволило бы мне получить что-то вроде:
<forkCount>${system.numCores}</forkCount>
Это возможно?
2 ответа
Вы можете попробовать использовать build-helper:cpu-count
плагин
http://www.mojohaus.org/build-helper-maven-plugin/cpu-count-mojo.html
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>get-cpu-count</id>
<goals>
<goal>cpu-count</goal>
</goals>
<configuration>
<cpuCount>system.numCores</cpuCount>
</configuration>
</execution>
</executions>
</plugin>
Это поместит доступное количество ядер в переменную system.numCores
,
Вы также можете указать коэффициент проекции в конфигурации, например, <factor>0.75</factor>
если вы хотите использовать часть доступных ядер. Это откорректирует количество ядер по заданному коэффициенту и гарантирует возврат целочисленного значения по крайней мере 1, т. Е. Использование коэффициента не уменьшит количество вычисленных ядер ниже 1.
Вы можете решить номер раньше в командной строке.
Linux: nproc
Окна: wmic cpu get NumberOfCores, NumberOfLogicalProcessors/Format:List
или используйте переменную окружения NUMBER_OF_PROCESSORS
(использовать с ${env.NUMBER_OF_PROCESSORS}
)
Примечание - для окон вам нужно настроить вывод и получить номер.
Затем передайте число в качестве параметра maven: -Dsystem.numCores=$NUM
или же -Dsystem.numCores=%NUM%
РЕДАКТИРОВАТЬ: Вы также можете создать файл со свойством (плагин maven exec), а затем прочитать его с плагином свойств maven. Все сделано во время одной сборки, на разных этапах
Надеюсь, это поможет.