我有一个Ant版本,我想转换为Gradle。 Ant构建利用一些自定义任务。蚂蚁build.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>
和jar中的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构建初始化OK,但是运行 server 失败,并显示以下错误:
> No such property: abc for class: org.gradle.api.internal.project.DefaultAntBuilder
我尝试了Ant路径和引用ID的各种组合,并将Ant项目类加载器作为loaderref传递。我还尝试使用
导入整个Ant构建ant.importBuild('build.xml') { antTargetName ->
'ant-' + antTargetName
}
但是没有运气。有人知道如何使这项工作吗?
答案 0 :(得分:1)
我想就是这行
ant.abc-server(...)
与Java一样,Groovy方法名称不能包含“-”字符。
选项1,删除破折号
<taskdef name="abcServer" loaderref="abc" classname="com.abc.ant.Server"/>
ant.abcServer(...)
选项2,方法名称用引号引起来
ant.'abc-server'(...)