在 Gradle 构建中使用 Ant taskdef 和 loaderref



我有一个 Ant 版本,我想转换为 Gradle。Ant 构建使用了一些定制任务。蚂蚁构建.xml看起来像

<project name="proj" basedir=".">
<property name="abc.path" value="lib/abc-ant.jar"/>
<taskdef resource="com/abc/antlib.xml" classpath="${abc.path}" loaderref="abc"/>
</project>

罐子里的 antlib.xml 文件看起来像

<antlib>
<taskdef name="abc-server" loaderref="abc" classname="com.abc.ant.Server"/>
<taskdef name="abc-export" loaderref="abc" classname="com.abc.ant.Export"/>
<taskdef name="abc-import" loaderref="abc" classname="com.abc.ant.Import"/>
</antlib>   

loaderref 很重要,因为abc-export和 abc-import 任务在内部调用abc-server我的build.gradle看起来像

apply plugin: 'groovy'
ant.property(name: 'abc.path', value: 'lib/abc-ant.jar')
ant.taskdef(resource: "com/abc/ant/antlib.xml", classpath: ant.properties['abc.path'], loaderref: 'abc')
task server(group: "abc") {
doLast {
ant.abc-server(id: "id", url: 'https://www.example.com/', user: 'user@abc.com', password: 'xxx')
}
}

gradle 构建初始化正常,但运行服务器失败,并显示如下错误:

> No such property: abc for class: org.gradle.api.internal.project.DefaultAntBuilder

我已经尝试了 Ant 路径和引用 ID 的各种组合,并将 Ant 项目类加载器作为 loaderref 传递。我还尝试导入整个 Ant 构建,使用

ant.importBuild('build.xml') { antTargetName ->
'ant-' + antTargetName
}

但是没有运气。有人知道如何做到这一点吗?

我会说是这一行

ant.abc-server(...)

就像Java一样,Groovy方法名称不能包含"-"字符。

选项 1,删除破折号

<taskdef name="abcServer" loaderref="abc" classname="com.abc.ant.Server"/>
ant.abcServer(...)

选项 2,用引号将方法名称括起来

ant.'abc-server'(...)

最新更新