首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gradle构建中使用Ant taskdef和loaderref

在Gradle构建中使用Ant taskdef和loaderref
EN

Stack Overflow用户
提问于 2018-09-11 18:39:55
回答 1查看 907关注 0票数 0

我有一个Ant构建,我想转换为Gradle。Ant构建使用了一些自定义任务。Ant build.xml看起来像

代码语言:javascript
复制
<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文件看起来像

代码语言:javascript
复制
<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>   

加载程序很重要,因为abc-导出和abc-导入任务在内部调用abc-服务器。我的build.gradle看起来就像

代码语言:javascript
复制
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,但运行服务器时出错,如下所示:

代码语言:javascript
复制
> No such property: abc for class: org.gradle.api.internal.project.DefaultAntBuilder

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

代码语言:javascript
复制
ant.importBuild('build.xml') { antTargetName ->
    'ant-' + antTargetName
}

但没有运气。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 20:03:23

我会说是这条线

代码语言:javascript
复制
ant.abc-server(...)

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

选项1,移除破折号

代码语言:javascript
复制
<taskdef name="abcServer" loaderref="abc" classname="com.abc.ant.Server"/>

ant.abcServer(...)

选项2,用引号包围方法名

代码语言:javascript
复制
ant.'abc-server'(...)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52282293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档