You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Groovy AntBuilder以编程方式获取Ant exec任务的进程退出码

在Groovy AntBuilder中获取exec任务的退出码

问题描述

我尝试通过Ant的exec任务执行命令后获取退出码,但通过ant.properties访问设置的resultproperty时返回null。以下是我的代码示例:

import groovy.ant.AntBuilder

def cmd = 'ls -l'

def ant = new AntBuilder()
ant.echo('Hello, Ant Builder!')

ant.exec(executable: 'bash', resultproperty: 'my.cmd.exitCode') {
    arg(value: '-c')
    arg(value: cmd)
}
ant.echo('Exit code is ${my.cmd.exitCode}')

// 以下代码返回null
def cmdExitCode = ant.properties['my.cmd.exitCode']
println "Exit code: ${cmdExitCode}"

println "Properteis: ${ant.properties}"

执行后的部分输出:

[echo] Hello, Ant Builder!
     [exec] total 64
     ...
     [echo] Exit code is 0
Exit code: null
Properteis: [saveStreams:true, current:null, antXmlContext:org.apache.tools.ant.helper.AntXMLContext@78411116, class:class groovy.ant.AntBuilder, antProject:org.apache.tools.ant.Project@aced190, project:org.apache.tools.ant.Project@aced190]

Ant官方文档中关于exec的说明:

outputproperty:用于存储命令输出的属性名称。除非错误流重定向到单独的文件或流,否则该属性将包含错误输出。

我不清楚如何在Groovy AntBuilder中以编程方式正确访问这个退出码属性。

解决方案

你需要通过AntBuilder关联的Ant Project实例来访问resultproperty设置的属性,而不是直接访问ant.properties——ant.properties是Groovy AntBuilder自身的属性集合,并非Ant项目的属性容器。

修改后的代码如下:

import groovy.ant.AntBuilder

def cmd = 'ls -l'

def ant = new AntBuilder()
ant.echo('Hello, Ant Builder!')

ant.exec(executable: 'bash', resultproperty: 'my.cmd.exitCode') {
    arg(value: '-c')
    arg(value: cmd)
}
ant.echo('Exit code is ${my.cmd.exitCode}')

// 改为从antProject中获取属性
def cmdExitCode = ant.antProject.getProperty('my.cmd.exitCode')
println "Exit code: ${cmdExitCode}"

// 查看Ant项目的属性集合(可选)
println "Ant Project Properties: ${ant.antProject.properties}"

关键说明

  • ant.antProject是Groovy AntBuilder持有的Ant核心Project对象,所有通过Ant任务设置的resultproperty、outputproperty都会存储在这个对象的属性集合中。
  • 你也可以用ant.project.getProperty('my.cmd.exitCode'),因为AntBuilder的project属性是antProject的别名。
  • 如果需要将属性值转为整数类型,可以用cmdExitCode.toInteger()处理。

内容的提问来源于stack exchange,提问作者Lawrence Zeng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:33:21