如何获取Ant中的availableProcessors数量

时间:2009-07-23 08:05:37

标签: java ant

我想从我的Ant构建脚本获取availableProcessors的数量(即从Runtime.getRuntime()。availableProcessors()返回的值。是否存在包含此值的现有属性,或者我是否必须编写自定义ant任务?

6 个答案:

答案 0 :(得分:3)

This post by Ilia Chemodanov很好地解释了两个解决方案。

如果您不想编译和导入Java类,您可以在纯蚂蚁中执行(虽然它非常hacky)

<target name="get-cores">
    <property environment="env"/>
    <!-- support for Windows -->
    <condition property="cores.count" value="${env.NUMBER_OF_PROCESSORS}">
        <os family="windows" />
    </condition>
    <!-- support for Linux and Solaris (package SUNWgnu-coreutils is required) -->
    <exec executable="nproc" outputproperty="cores.count" os="Linux,SunOS,Solaris">
        <arg value="--all"/>
    </exec>
    <!-- support for Mac OS X -->
    <exec executable="sysctl" outputproperty="cores.count" os="Mac OS X">
        <arg value="-n"/>
        <arg value="hw.ncpu"/>
    </exec>
    <echo message="Number of cores: ${cores.count}"/>
</target>

答案 1 :(得分:2)

write your custom ant task,写一个类

很简单

答案 2 :(得分:0)

JVM不提供这样的属性,也不提供ant。您可以执行以下操作之一,而不是编写自定义任务:

  1. 编写一个Java类,将处理器的数量打印到标准输出。将java任务与outputproperty属性一起使用,将值设置为在ant。中使用的属性。
  2. 如果您只构建一个单一平台,请使用exec任务调用本机,将处理器数量打印到标准输出。如上所述,使用outputproperty属性将值设置为在ant。中使用的属性。

答案 3 :(得分:0)

就像@dfa提到的那样,写下own custom task这是一个不错的选择。

但是,如果构建服务的主机与运行它的主机不同,那么核心数将不同(您将获得构建服务的主机的可用处理器数量)。

如果你不想这样,那么你可以在你的构建脚本中使用一个小的shell脚本,就像这样(对于像OS这样的UNIX):

$(/usr/bin/nproc --all)

我先检查命令是否存在,if(type /usr/bin/nproc) ....但这取决于你想要如何实现它。

答案 4 :(得分:0)

如果您在构建中声明:

<property runtime="runtime"/>

您使用属性 ${runtime.availableProcessors} 获得处理器的数量。

这需要 Ant 1.9.12+ 或 Ant 1.10.4+

答案 5 :(得分:-1)

我从未听说过这样的属性,因此我认为你应该编写自定义任务。

马努