【问题标题】:Calling Ant Macrodef from Gradle从 Gradle 调用 Ant Macrodef
【发布时间】:2015-07-17 15:49:39
【问题描述】:

我似乎无法在我的 Gradle 脚本中找到列出和/或调用 Ant Macrodef 的方法。 Gradle 用户指南talks 关于 Macrodefs 但没有在此处提供示例。谁能告诉我如何做到这一点?

目前我通过执行 ant.importBuild 任务导入 Ant 构建。这很好用,因为 Ant 目标显示为 Gradle 任务。但是,我无法列出和/或调用 Ant 构建中所述的 Ant Macrodefs。谁能给我答案?

【问题讨论】:

  • 该解决方案对您有用吗?如果是,你可能想接受它。

标签: ant gradle build.gradle macrodef


【解决方案1】:

你的build.xml

<project name="test">

    <macrodef name="sayHello">
        <attribute name="name"/>
        <sequential>
            <echo message="hello @{name}" />
        </sequential>
    </macrodef>

</project>

build.gradle

ant.importBuild 'build.xml'

task hello << {
      ant.sayHello(name: 'darling')
}

让我们测试一下

/cygdrive/c/temp/gradle>gradle hello
:hello
[ant:echo] hello darling

BUILD SUCCESSFUL

Total time: 2.487 secs

【讨论】:

  • 虽然这个解决方案并不能完全解决我的问题,但这是/一种在 Gradle 中调用 Ant 宏定义的方法。我找不到调用宏定义的方法的原因是我的宏定义名称包含几个“-”字符,Gradle 无法处理。
  • 你知道列出所有已加载宏定义的方法吗?
  • @HELOX 不,我没有找到列出它们的方法
【解决方案2】:

Ant 允许使用不符合 Groovy 标识符限制的宏名称。 如果是这种情况,明确的invokeMethod 调用会有所帮助。 给定:

<project name="test">

<macrodef name="sayHello-with-dashes">
    <attribute name="name"/>
    <sequential>
        <echo message="hello @{name}" />
    </sequential>
</macrodef>

</project>

这会起作用

ant.importBuild 'build.xml'

task hello << {
  ant.invokeMethod('sayHello-with-dashes', [name: 'darling'])
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多