【问题标题】:Determining number of CPU cores during a Maven build在 Maven 构建期间确定 CPU 内核的数量
【发布时间】:2015-08-11 13:22:40
【问题描述】:

我目前正在使用 Maven Failsafe Plugin 进行测试的分叉执行(在不同的 JVM 中并行运行多个)。

我根据我的机器的核心数手动设置 forkCount 变量,但我希望这由 Maven 自动确定,让我最终得到类似:

<forkCount>${system.numCores}</forkCount>

这可能吗?

【问题讨论】:

  • 试试${env.Number_Of_Processors}

标签: maven maven-failsafe-plugin


【解决方案1】:

您可以尝试使用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

您还可以在配置中指定投影因子,例如&lt;factor&gt;0.75&lt;/factor&gt; 如果您想使用一小部分可用内核。这将通过给定因子调整内核数,并保证返回至少为 1 的整数值,即使用因子不会将计算的内核数减少到 1 以下。

【讨论】:

    【解决方案2】:

    您可以在命令行上解析之前的数字。

    Linux:nproc
    Mac 操作系统:sysctl -n hw.ncpu
    Windows:wmic cpu get NumberOfCores, NumberOfLogicalProcessors/Format:List 或使用环境变量NUMBER_OF_PROCESSORS(与${env.NUMBER_OF_PROCESSORS}一起使用)

    注意 - 对于 Windows,您需要调整输出并获取数字。

    然后,将数字作为参数传递给 maven:-Dsystem.numCores=$NUM
    -Dsystem.numCores=%NUM%

    编辑:您还可以使用属性(maven exec 插件)生成一个文件,然后使用 maven 属性插件读取它。所有这些都在同一个构建中的不同阶段完成

    我希望这会有所帮助。

    【讨论】:

    • 谢谢,但我正在寻找可以包含在 POM 中的内容(例如,其他开发人员不必知道传入 arg)
    • 你是windows还是linux?
    • 你也可以用属性(maven exec插件)生成一个文件,然后用maven属性插件读取。所有这些都是在同一个构建过程中的不同阶段完成的。
    • @Eidad AK - 两种操作系统都是理想的。生成文件听起来有点老套,但应该可以,谢谢。
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2012-06-05
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多