ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeffrey Bacon <jba...@magmic.com>
Subject Re: creating a custom Condition
Date Wed, 23 Jun 2004 18:07:53 GMT
ok, I have written my antlib.xml file (see below) and have modified my 
<project> tag as well (see below).  com.magmic.ant.conditions.Exists 
class implements Condition.  I get the following errror when running it:

C:\workspace\com.magmic\build.xml:99: Class 
net.sf.antcontrib.logic.IfTask doesn't support the nested 
"antlib:com.magmic:exists" element.

Shouldn't the Ant introspection stuff kick in and let IfTask use my oen 
Conditions?

PROJECT DEFINITION:

<project name="Magmic BlackBerry Build Script"
          default="help-mini"
          xmlns:magmic="antlib:com.magmic"
          xmlns:contrib="antlib:net.sf.antcontrib"
          xmlns:antenna="http://antenna.sourceforge.net">

USAGE:

   <target name="load-properties-file">
     <contrib:if>
       <magmic:exists file="${basedir}/${properties-file}" />
       <contrib:then>
         <echo level="info">Loading ${properties-file} ...</echo>
         <echo level="debug">       ${basedir}/${properties-file}</echo>
         <property file="${basedir}/${properties-file}" />
       </contrib:then>
     </contrib:if>
   </target>

ANTLIB FILE:

<? xml version="1.0" ?>
<antlib>
    <typedef name="exists"
             classname="com.magmic.ant.conditions.Exists" />

    <typedef name="application" 

             classname="com.magmic.ant.datatypes.Application" />
    <typedef name="cod"
             classname="com.magmic.ant.datatypes.COD" />
    <typedef name="midlet"
             classname="com.magmic.ant.datatypes.MIDlet" />

    <taskdef name="alx"      classname="com.magmic.ant.tasks.ALX" />
    <taskdef name="filesize" classname="com.magmic.ant.tasks.FileSize" />
    <taskdef name="jad"      classname="com.magmic.ant.tasks.JAD" />
    <taskdef name="jshrink"  classname="com.magmic.ant.tasks.JShrink" />
    <taskdef name="rapc"     classname="com.magmic.ant.tasks.RAPC" />
    <taskdef name="version"  classname="com.magmic.ant.tasks.Version" />
</antlib>

--
Jeffrey Bacon
jbacon@magmic.com
Creative Developer
http://www.magmic.com


Peter Reilly wrote:
> Chuck Daniels wrote:
> 
>> This is new for 1.6.  See http://ant.apache.org/manual/index.html.  
>> Click on
>> the "Concepts and Types" link on the left.
>>  
>>
> Also,  it is only in ant 1.6+ that one can have custom conditions.
> 
> 
>>  
>>
>>> -----Original Message-----
>>> From: Jeffrey Bacon [mailto:jbacon@magmic.com]
>>> Sent: Thursday, June 17, 2004 3:37 PM
>>> To: Ant Users List
>>> Subject: Re: creating a custom Condition
>>>
>>>
>>> thanks.  Is there documentation for this anywhere?  I read "Java
>>> Development with Ant" by Erik Hatcher & Steve Loughran which coevers Ant
>>> 1.5 and it didn't mention this.
> 
> Hopefully there will be a new edition of this excellent book........
> 
> Peter
> 
>>> Searching on the web for extending Ant
>>> all talked about properties file firmat not XML format.  Is this
>>> new in 1.6?
>>>
>>> -- 
>>> Jeffrey Bacon
>>> jbacon@magmic.com
>>> Creative Developer
>>> http://www.magmic.com
>>>
>>>
>>> Peter Reilly wrote:
>>>   
>>>
>>>> You need to use <typedef> and not <taskdef>
>>>>
>>>> One can mix typedefs and taskdefs  in an xml resource
>>>> file:
>>>>
>>>> magmic.xml
>>>> <antlib>
>>>>   <typedef name="exists" classname="com.magmic.anttasks.Exists"/>
>>>>   <taskdef name="mytask" classname="com.magmic.anttasks.MyTask"/>
>>>> </antlib>
>>>>
>>>> build.xml
>>>> <typedef resource="magmic.xml"/>
>>>>
>>>> If you place the definitions a resource called com/magmic/antlib.xml,
>>>> you can
>>>> use the preferred xml namespace short-cut for third-party ant type/task
>>>> plugins:
>>>>
>>>> <project xmlns:mg="antlib:com.magmic"
>>>>        xmlns:ac="antlib:net.sf.antcontrib">
>>>>  <ac:if>
>>>>     <mg:exists file="bin"/>
>>>>     <ac:then>
>>>>        <echo>The file 'bin', it does exist!</echo>
>>>>     </ac:then>
>>>>  </ac:if>
>>>> </project>
>>>>
>>>> The reason it is preferred to use xml namespaces for third-partry tasks
>>>> is that it is possible for a type/task of the name "exists" to
>>>>     
>>>
>>> be present
>>>   
>>>
>>>> in ant-contrib or ant core at some time in the future.
>>>>
>>>> Peter
>>>>
>>>> Jeffrey Bacon wrote:
>>>>
>>>>     
>>>>
>>>>> I would like to create a custom condition (like the equals condition)
>>>>> that I can use in the <if> task from the ant-contrib library. 
I
>>>>> looked at the source code to the Equals.java file and replicated that
>>>>> however Ant doesn't like me to define it as a task since it doesn't
>>>>> have an execute() method.  Below is my build.xml snippit, properties
>>>>> file line and code for a sample custom condition.  Can anyone help me
>>>>> out as to what's wrong?
>>>>>
>>>>> build.xml:
>>>>>  <taskdef resource="magmictasks.properties" />
>>>>>
>>>>> magmictasks.properties:
>>>>>  exists=com.magmic.anttasks.Exists
>>>>>
>>>>> usage in build.xml:
>>>>>    <if>
>>>>>      <exists file="bin" />
>>>>>      <then>
>>>>>        <echo>Not clean</echo>
>>>>>      </then>
>>>>>    </if>
>>>>>
>>>>> build.xml output:
>>>>>
>>>>> $ ant clean build install
>>>>> Buildfile: build.xml
>>>>> No public execute() in class com.magmic.anttasks.Exists
>>>>>
>>>>> BUILD FAILED
>>>>> C:\workspace\MagmicAntTasks\build.xml:6: No public execute() in class
>>>>> com.magmic.anttasks.Exists
>>>>>
>>>>> Total time: 0 seconds
>>>>>
>>>>> ============== CODE ==============
>>>>>
>>>>> package com.magmic.anttasks;
>>>>>
>>>>> import java.io.File;
>>>>>
>>>>> import org.apache.tools.ant.BuildException;
>>>>> import org.apache.tools.ant.Task;
>>>>> import org.apache.tools.ant.taskdefs.condition.Condition;
>>>>>
>>>>>
>>>>> /**
>>>>> * @author <a href="mailto:jbacon@magmic.com">Jeffrey Bacon</a>
>>>>> * @version $Revision: 1 $
>>>>> */
>>>>> public class Exists implements Condition {
>>>>>
>>>>>  private File file;
>>>>>
>>>>>  public void setFile(File file) {
>>>>>      this.file = file;
>>>>>  }
>>>>>
>>>>>  /**
>>>>>   * @see org.apache.tools.ant.taskdefs.condition.Condition#eval()
>>>>>   */
>>>>>  public boolean eval() throws BuildException {
>>>>>    return this.file != null && this.file.exists();
>>>>>  }
>>>>> }
>>>>>
>>>>>
>>>>>       
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>>> For additional commands, e-mail: user-help@ant.apache.org
>>>>
>>>>     
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>
>>>   
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>> For additional commands, e-mail: user-help@ant.apache.org
>>
>>
>>
>>  
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message