ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Loughran <ste...@apache.org>
Subject Re: antlib loading in typedef
Date Tue, 23 Aug 2005 10:35:41 GMT
Stefan Bodewig wrote:
> On Mon, 22 Aug 2005, Steve Loughran <stevel@apache.org> wrote:
> 
> 
>>Why do you have to repeat the full path to an antlib in <typedef>,
>>when declaring into an antlib url.
> 
> 
> antlib descriptor, you mean?
> 
> If so, I agree with you, we should magically provide a default for the
> resource attribute if uri has been specified and uses the antlib
> protocol.
> 

This is working, I now have an importable build file whose aim in life 
is to make sure an antlib is loaded, and if not, pulls down the files 
from the maven libraries and declares them.



<?xml version="1.0" ?>
<project name="sftasks"
   xmlns:ac="antlib:net.sf.antcontrib"
   xmlns:sf="antlib:org.smartfrog.tools.ant"
   xmlns:m2="antlib:org.apache.maven.artifact.ant"
   >

   <target name="smartfrog-tasks-classpath"
     depends="core.load-version-info">
     <m2:dependencies pathID="smartfrog.tasks.classpath">
       <dependency groupID="org.smartfrog"
         artifactID="smartfrog"
         version="${smartfrog-version}"
         scope="compile"
         />
       <dependency groupID="org.smartfrog"
         artifactID="sfServices"
         version="${smartfrog-version}"
         scope="compile"
         />
       <dependency groupID="org.smartfrog"
         artifactID="sf-tasks"
         version="${smartfrog-version}"
         scope="compile"
         />
     </m2:dependencies>
   </target>


   <target name="use-smartfrog-tasks" 
depends="sftasks.smartfrog-tasks-classpath"
     description="declare the classpath and imports for the smartfrog 
tasks">
     <property name="sf.antlib.uri" 
value="antlib:org.smartfrog.tools.ant" />
     <ac:if>
       <not>
         <typefound
           uri="${sf.antlib.uri}"
           name="startdaemon"/>
       </not>
       <ac:then>
         <typedef
           uri="${sf.antlib.uri}"
           classpathref="smartfrog.tasks.classpath"
           onerror="failall"
       />
       </ac:then>
       <ac:else>
         <echo level="verbose">Tasks already found</echo>
       </ac:else>
     </ac:if>

   </target>


</project>

Next I could tease out some of it into a macro for broader re-use, which 
leads to the next issue.

One change I have also checked in to Definer.java is some extra logic 
for naming antlibs. Instead of just

	antlib:org.example.package

you can go

	antlib://org/example/package/file.xml

and have that file's declarations read in. This will let me keep a set 
of antlibs in a single dir, load it with -lib and then have

antlib://m2-macros.xml
antlib://sf-macros.xml

So, I am clearly +1 in having this feature. What I am 0 about is the 
exact syntax. Should it be a full path like what I have done, or should 
it be

antlib://org.example.package/file.xml
antlib:org.example.package/file.xml
antlib://org.example.package/antlib.xml

In which case, the antlib.xml is just something we patch in on the end 
if there is no /*.xml file defined at the tail.

Thoughts?






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


Mime
View raw message