我正在遵循Apache Ant文档中的“ Writing Your Own Task”,但无法使其与Condition
以外的其他接口一起使用:
在 CustomTask.java 中:
public final class CustomTask extends Task {
public void add(final Type type) {
log("Got: " + type + " with value: " + type.getValue());
}
@Override
public void execute() {
log("Executing custom task...");
}
}
在 Type.java 中:
public interface Type {
String getValue();
void setValue(final String value);
}
在 DefaultType.java 中:
public class DefaultType implements Type {
private String value;
@Override
public String getValue() {
return value;
}
@Override
public void setValue(final String value) {
this.value = value;
}
}
在我要使用它们的 build.xml 中:
<taskdef name="custom-task" classname="CustomTask" classpathref="run_classpath" />
<typedef name="default-type" classname="DefaultType" classpathref="run_classpath" />
<target name="custom">
<custom-task>
<default-type value="Hello world!" />
</custom-task>
</target>
但是出现以下错误:
.../build.xml:37: custom-task doesn't support the nested "default-type" element.
这里令人发疯的是,如果我使DefaultType
实现org.apache.tools.ant.taskdefs.condition.Condition
接口(如文档中的示例所示)并将以下方法添加到CustomTask
类中:>
public void add(final Condition condition) {
log("Got: " + condition);
}
它起作用:(!?!?!)
custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...
我不明白,org.apache.tools.ant.taskdefs.condition.Condition
接口仅可与之配合使用的特殊之处是什么?
感谢您的帮助。
答案 0 :(得分:0)
如果您将loaderref
属性添加到两个具有相同值的定义(似乎可以是任何内容,this is not clear in the documentation),问题似乎就消失了:
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />