# Apache Myrmidon - My First Task

|  | Apache Myrmidon

Myrmidon

- Introduction
- Get Involved
- Building Myrmidon
- Todo List

User Guide

- Build file
- Virtual File System
- Ant1 Compatibility Layer
- Differences to Ant1
- My First Task

Extending Ant

- Configuration HOWTO
- Converter HOWTO
- Type HOWTO
- ClassLoader HOWTO
- Library HOWTO

Container Design

My First Task

> In ant1 it was very easy to write your own task. In Ant2 we plan to make it even easier. To write a basic task simply follow the following formula.

> 1. Create a Java class that extends `org.apache.myrmidon.api.AbstractTask`
> 2. For each attribute, write a setter method. The setter method must be a public void method that takes a single argument. The name of the method must begin with "set", followed by the attribute name, with the first character of the name in uppercase, and the rest in lowercase. The type of the attribute can be:
>    - String
>    - Any primitive type - they are converted for you from their String-representation in the buildfile
>    - File - the string representation will be interpreted relative to the project's basedir.
> 3. For each nested element create a public void method that takes a single argument. The name of the method must begin with "add", followed by the attribute name, with the first character of the name in uppercase, and the rest in lowercase. The type of the parameter is an object with a no-arguement constructor. It is configured in exactly the same was a task is configured (via setters and adders) and then added to the task.
> 4. Write a public void method named "execute" with no arguments that throws a TaskException. This is the method called to do the actual work of the task.

> A Basic Example

> > So a basic task that has one attribute named "message" and just prints out this message is as simple as;

> >     package org.realityforge.tasks;

> >     import org.apache.myrmidon.api.AbstractTask;
> >     import org.apache.myrmidon.api.TaskException;

> >     public class SystemOutPrinterTask
> >         extends Task
> >     {
> >         private String m_message;

> >         // The setter for the "message" attribute
> >         public void setMessage( final String message )
> >         {
> >             m_message = message;
> >         }

> >         // The method executing the task
> >         public void execute()
> >             throws TaskException
> >         {
> >             System.out.println( m_message );
> >         }
> >     }

> > To use this task you could create a library but instead we will just use <taskdef> to define the task. An example usage would be;

> >     <?xml version="1.0"?>

> >     <project version="2.0">

> >       <target name="main">
> >         <taskdef name="printer"
> >                  classname="org.realityforge.tasks.SystemOutPrinterTask"
> >                  classpath="build/classes"/>

> >         <printer message="Hello World!"/>
> >       </target>
> >     </project>

Copyright © 2000-2002, Apache Software Foundation