http://ant.apache.org/manual/develop.html#nested-elementsで説明されているように、カスタムAntタグにネストされた型を追加しようとしていますが、例外が発生し続けますouter doesn't support the nested "innerone" element.
私は午前中グーグルで過ごしましたが、この問題に対処するこのパターンを使用した例、チュートリアル、またはヘルプを見つけることができず、それが実装されているかどうか疑問に思い始めています!
私のビルドファイル:
<?xml version="1.0"?>
<project name="test" default="tester" basedir="../../..">
<taskdef name="outer" classname="tester.Outer" classpath="target/classes"/>
<typedef name="innerone" classname="tester.Outer$InnerOne" classpath="target/classes"/>
<typedef name="innertwo" classname="tester.Outer$InnerTwo" classpath="target/classes"/>
<target name="tester">
<innerone/>
<innertwo/>
<outer>
<innerone/>
<innertwo/>
</outer>
</target>
</project>
Javaコード:
public class Outer extends Task
{
private List<Inner> inners = new ArrayList<Inner>();
public void add(Inner inner) {
inners.add(inner);
System.out.println("Add: ");
}
public void addConfigured(Inner inner) {
inners.add(inner);
System.out.println("AddConfigured: ");
}
public void execute() {
for (Inner inner : inners) {
System.out.println("Inner: " + inner.getMsg());
}
}
public interface Inner {
String getMsg();
}
public static class InnerOne implements Inner {
public String getMsg() {
return "One";
}
}
public static class InnerTwo implements Inner {
public String getMsg() {
return "Two";
}
}
}
メソッドを使用するaddInner(Inner inner)
とaddConfiguredInner(Inner inner)
両方とも機能しますが、Outerクラスでメソッドを明示的に作成しなくても、Innerインターフェイスを実装する内部タグを追加できるようにしたいと思います。