You need to do a <typedef> and not a <taskdef> to define the new type.

Looking at the code:

    Jar: public void addConfiguredService(Service service) {}

the new type should work.

The reason that <taskdef> does not work is that the Sevice class does
not extend Task
and using <taskdef> will cause ant to use a proxy class, which will
not match the addConfigured signature.


Peter


On Thu, Sep 11, 2008 at 1:03 PM, John5342 <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Thanks for the reply.
>
>>Does it produce a classpath??
>>
>>What do you expect should the jar task do with the element?
>
> I explained in my first email but will clarify.
>
> My aim is to create an enhanced service element for the jar task. I
> subclassed the Service class because i know the jar task already knows what
> to do with the service element. My AutoService subclass then has an extra
> attribute (naed classpath) that AutoService will search for possible
> providers. For each provider AutoService finds I am simply calling
> Service.addConfiguredProvider().
>
> From what i understand from documentation is that with a few exceptions with
> type conversion (such as String to Path and such) elements cause the
> appropriate type (known from taskdef and typedef) to be constructed and
> added to the first addXX function that can handle the type. My hope was that
> since AutoService is a subclass of Service (and therefore looks and acts the
> same from the jar tasks point of view) everything would just work.
>
> Have i misunderstood how ant works?
>
> Is there a way around this?
>
> Is the best way to just create a specialised jar task instead?
>
> Is easy enough to create a new jar task instead but my approach if it works
> just seemed cleaner.
>
>
> And in case it makes any difference:
>>What i understood:
>>You created a task called autoservice.
> Service from which i inherit doesnt actually implement Task so doesnt seem
> to be a task as such.
>
> Thanks, John
>
> 2008/9/11 Knuplesch, Juergen <[EMAIL PROTECTED]>
>
>> Hello,
>>
>>
>> The error you get tells simply, that your created task is not an allowed
>> subelement of the jar-task.
>> You run into a syntax error.
>> It is not possible to change the jar task (or any other task) by adding
>> your own tasks as subelements.
>>
>> Probably you have to write your own jar-task, that will understand your
>> subelement.
>>
>> What i understood:
>> You created a task called autoservice.
>>
>> What does this task do?
>> Does it produce a classpath??
>>
>> What do you expect should the jar task do with the element?
>>
>> Tell us and then you will get probably some hints to do what you want.
>>
>> Then you have to write your own Ant-Task doing the stuff you want.
>>
>> --
>> Jürgen Knuplesch
>>
>> -----Ursprüngliche Nachricht-----
>> Von: John5342 [mailto:[EMAIL PROTECTED]
>> Gesendet: Mittwoch, 10. September 2008 20:08
>> An: user@ant.apache.org
>> Betreff: Custom element for jar task.
>>
>> Hi,
>>
>> I have a rapidly evolving project which contains a large and varying number
>> of service providers. I was hoping to create to create a more specialized
>> version of the service element that automatically scans for providers in a
>> give classpath but have run into some trouble asuming what i want to do is
>> even possible.
>>
>> I started off by subclassing org.apache.tools.ant.types.spi.Service which
>> provides the current service element and added setClassPath() and some lgic
>> to automatically scan the given classpath for any classes implementing the
>> the given type and add add appropriate providers to Service. I then added
>> the following to my build.xml:
>>
>> <target name="autoservice.taskdef" depends="autoservice.compile">
>>    <typedef name="autoservice" classname="ag.tools.ant.AutoService"
>> classpath="${autoservice.classes}"/>
>> </target>
>>
>> <target name="jar" depends="autoservice.taskdef,project.compile">
>>    <jar destfile="${build.dir}">
>>      <fileset dir="${src.dir}"/>
>>      <autoservice type="ag.core.AGApp" classpath="${build.dir}"/>
>>    </jar>
>> </target>
>>
>>
>> autoservice.taskdef runs fine but when i get to the jar target i get the
>> following error:
>>
>> /Projects/ag/build.xml:103: jar doesn't support the nested "autoservice"
>> element.
>>
>> Is what i am trying to do even possible? and if so any ideas where to go
>> from here?
>>
>> Thanks, John
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to