Ich schreibe eine benutzerdefinierte Ant-Aufgabe, die einen benutzerdefinierten geschachtelten Typ akzeptieren muss.Benutzerdefinierte Aufgaben in Ant: ADDTYPE (TYPE x) vs. add (TYPE x) (letzteres funktioniert nicht)
Nach the Ant manual sollte ich in der Lage sein, addConfigured (TYPE x) anstelle von addConfiguredTYPE (TYPE x) zu verwenden. Gemäß this article (Abschnitt Neue Reflektionsregeln, Polymorphismus in Ant 1.6) wurde die Unterstützung für addConfigured (TYPE x) in Ant 1.6 hinzugefügt.
<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>
Die Aufgabe ist in Java implementiert
public class CustomTask extends Task
{
...
public void addConfigured(CustomType t)
{...}
....
public static class CustomType
{...}
}
Wenn ich versuche, die Build-Skript auszuführen, erhalte ich die folgende Ausnahme:
Build Failed: custom-task doesn't support the nested "custom-type" element.
Allerdings, wenn ich ändern
<typedef name="custom-type" classname="com.acme.CustomTask$CustomType">
...
<custom-task>
<custom-type/>
</custom-task>
...
public void addConfigured(CustomType t)
bis
<typedef name="customtype" classname="com.acme.CustomTask$CustomType">
...
<custom-task>
<customtype/>
</custom-task>
...
public void addConfiguredCustomType(CustomType t)
alles funktioniert wie erwartet.
Gibt es einen Grund, warum die generische addConfigured (TYPE x) -Technik in meinem Fall nicht zu funktionieren scheint?
Andere Leute here und here hatten das gleiche Problem.
PS: Ant Version 1.7.0
Ich nehme an, Sie meinten: 'typedef name =" mein-benutzerdefinierter type "' oder 'typedef name =" mycustomtype "'? – VonC
Nein, ich habe im ersten Teil meinen "benutzerdefinierten Typ" gemeint. Striche im Namen zu haben ist der einzige Grund, warum ich die generische addConfigured (TYPE x) -Methode verwenden möchte. – niktech
Ja, ich verstehe, aber Sie haben geschrieben: 'typedef name =" custom-type "' in Ihrem ersten Beispiel, kurz bevor Sie das '' Element verwenden, das mich verwirrt. –
VonC