2009-07-08 6 views
2

カスタムの入れ子型を受け入れる必要のあるカスタムAntタスクを作成しています。Antのカスタムタスク:addTYPE(TYPE x)vs add(TYPE x)(後者は機能しません)

the Ant manualによると、addConfiguredTYPE(TYPE x)ではなくaddConfigured(TYPE x)を使用できるはずです。また、Ant 1.6では、this article(セクションNew Reflectionの規則、Ant 1.6の多態性)addConfigured(TYPE x)のサポートが追加されました。しかし

Build Failed: custom-task doesn't support the nested "custom-type" element.

、私は

を変更する場合:

<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> 

タスクは、私はビルドスクリプトを実行しようとすると、私は次の例外を取得するJava

public class CustomTask extends Task 
{ 
    ... 

    public void addConfigured(CustomType t) 
    {...} 

    .... 

    public static class CustomType 
    {...} 
} 

に実装されています

<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) 

すべて正常に動作します。

私の場合、一般的なaddConfigured(TYPE x)技法が機能しないような理由はありますか?

他の人herehereは同じ問題を抱えていました。

PS:Antのバージョンのことを指定しないAnt manualを考慮1.7.0

+0

'typedef name =" my-custom-type "'または 'typedef name =" mycustomtype "'としますか? – VonC

+0

いいえ、私は最初の部分で "私のカスタムタイプ"を意味しました。名前にダッシュを付けることが、汎用のaddConfigured(TYPE x)メソッドを使用する唯一の理由です。 – niktech

+0

はい、私は分かりますが、最初の例では、 ' '要素を使用する直前に' typedef name = "カスタム型"と書いています。 – VonC

答えて

1

定義順を変更しようとしましたか?つまり、まずtypedefを実行しましたか?このことが重要かどうかは分かりませんが、試してみる価値があります。

また、antlibでこれを梱包しようとしましたか?私の会社では多くのカスタムタスクがあり、普通のaddaddConfiguredメソッドが動作することを知っています。私たちはantlibを使い、最初にantlib.xmlの型を定義します。

+0

タスクをパッケージ化し、antlib.xmlにdefを入力することがトリックでした! Antに大きなバグがあり、antlib.xmlなしで同じことをすることができないようです。 – niktech

1

要素名に続く追加(addConfigured)で始まる必要がありアドイン(addConfigured)メソッドの名前、 。

、あなたは「addConfiguredCustomType」にあなたの「addConfigured」方法と改名事実は、それがここに動作させるために本当の鍵となりました。

+0

http://ant.apache.org/manual/develop.html#nestedtype Antは、特にaddConfigured(TYPE x)とadd(TYPE x)を許可します。 http://www.oracle.com/technology/pub/articles/bodewig_taskwriters.htmlによると、そのサポートはAnt 1.6で追加されました。 – niktech

0

あなた自身のタスクを書く上でのAnt manual sectionは記述が不適切ですが、あなたのメソッドは "addConfigured"だけでなく、 "addCustomType"または "addConfiguredCustomType"のいずれかと呼ばれることがあります。それを宣言するさまざまな方法には微妙な違いがありますので、注意深く読んで正しいものを手に入れてください。

+0

あなたが言及したものに続くセクションでは、add(TYPE x)とaddConfigured (TYPE x)。また、http://www.oracle.com/technology/pub/articles/bodewig_taskwriters.htmlによると、Ant 1.6でのNew Reflection Rules> Polymorphismというセクションで、public void addConfigured(X)を使用できることは明らかです。 Ant 1.6から始まります。 – niktech

+0

これで、もっと混乱します。ちょうど動くものと一緒に行きなさい。 – skaffman

+0

私がaddConfigured(X)を使用しようとしている理由は、タイプ名にダッシュを使用したいからです。 addConfiguredX(X)を使用しても、Xにはダッシュを使用できません。 – niktech

関連する問題