Java Ant中的自定义任务:addTYPE(类型x)与add(类型x)(后者不起作用)

Java Ant中的自定义任务:addTYPE(类型x)与add(类型x)(后者不起作用),java,ant,Java,Ant,我正在编写一个需要接受自定义嵌套类型的自定义Ant任务 根据,我应该能够使用addConfigured(类型x)而不是addConfiguredTYPE(类型x)。此外,根据(新反射规则,Ant1.6中的多态性)一节,在Ant1.6中添加了对addConfigured(x类型)的支持 <taskdef name="custom-task" classname="com.acme.CustomTask"> <classpath refid="task.classpath"

我正在编写一个需要接受自定义嵌套类型的自定义Ant任务

根据,我应该能够使用addConfigured(类型x)而不是addConfiguredTYPE(类型x)。此外,根据(新反射规则,Ant1.6中的多态性)一节,在Ant1.6中添加了对addConfigured(x类型)的支持

<taskdef name="custom-task" classname="com.acme.CustomTask">
    <classpath refid="task.classpath" />
</taskdef>

<typedef name="custom-type" classname="com.acme.CustomTask$CustomType">
    <classpath refid="task.classpath" />
</typedef>

...

<custom-task>
    <custom-type/>
</custom-task>
当我尝试运行构建脚本时,出现以下异常:

Build Failed: custom-task doesn't support the nested "custom-type" element. 生成失败:自定义任务不支持嵌套的“自定义类型”元素。 然而,当我改变

<typedef name="custom-type" classname="com.acme.CustomTask$CustomType">
...
<custom-task>
    <custom-type/>
</custom-task>
...
public void addConfigured( CustomType t )

...
...
已配置公共无效添加(自定义类型t)


...
...
public void addConfiguredCustomType(CustomType t)
一切正常

在我的案例中,泛型addConfigured(TYPE x)技术似乎不起作用,这有什么原因吗

其他人也有同样的问题

PS:Ant 1.7.0版

考虑到

add(
addConfigured
)方法的名称必须以add(
addConfigured
)开头,然后是元素名称


,您将“
addConfigured
”方法重命名为“
addConfiguredCustomType
”这一事实是使它在这里工作的真正关键。

关于编写自己的任务的说明写得很糟糕,但它确实说明您的方法可以被称为
addCustomType
addConfiguredCustomType
,不仅仅是
addConfigured
。声明它的各种方式都有细微的区别,因此请确保仔细阅读并获得正确的声明。

您是否尝试过更改定义顺序,即先执行typedef?不确定这是否重要,但值得一试


还有,你有没有试过把这个放在一个antlib里?在我的公司里,我们有许多定制任务,我知道普通的
add
addConfigured
方法是有效的。我们使用antlibs,并且总是首先在antlib.xml中定义类型,我想你的意思是:
typedef name=“我的自定义类型”
typedef name=“我的自定义类型”
?不,我在第一部分是指“我的自定义类型”。名称中有破折号是我想使用generic addConfigured(TYPE x)方法的唯一原因。是的,我理解,但您在第一个示例中写道:
typedef name=“custom TYPE”
,就在使用
元素之前,这让我很困惑。啊,谢谢您的更正。问题已修改。Ant特别允许addConfigured(类型x)和add(类型x)。根据,该支持是在Ant 1.6中添加的,您提到的后面的部分确实说可以使用add(类型x)和addConfigured(类型x)。另外,根据Ant1.6中名为New Reflection Rules>Polymorphics的部分,很明显可以使用public void addConfigured(X);从Ant1.6OK开始,现在更让人困惑了。我之所以选择addConfigured(X),是因为我想在type name中使用破折号。使用addConfiguredX(X)不允许X有任何破折号。将任务和类型defs打包到antlib.xml中就成功了!Ant中似乎存在一个主要缺陷,它阻止在没有antlib.xml的情况下执行相同的操作。
<typedef name="custom-type" classname="com.acme.CustomTask$CustomType">
...
<custom-task>
    <custom-type/>
</custom-task>
...
public void addConfigured( CustomType t )
<typedef name="customtype" classname="com.acme.CustomTask$CustomType">
...
<custom-task>
    <customtype/>
</custom-task>
...
public void addConfiguredCustomType( CustomType t )