antlib namespace and uri usage

2009-04-23 Thread Gilles Scokart
Yesterday I lost 1 hour to fix an antlib namespace issue.  I have no found
how to fix it, but I still don't clearly understand what is actually wrong
(=what error message should ant report).

I have an antlib defined in an XML file like this :

antlib xmlns:deco=antlib:net.sourceforge.deco.ant
  taskdef name=analyze
   classname=net.sourceforge.deco.ant.Analyze
/
/antlib


And I have my project was using it like this :

project name=build_base xmlns:deco=net.sourceforge.deco.ant

typedef resource=net/sourceforge/deco/ant/antlib.xml
uri=net.sourceforge.deco.ant
classpath
fileset dir=${build.script.dir}/lib/
include name=deco*.jar/
  /fileset
  pathelement
location=${build.script.dir}/lib/asm-3.1.jar /
/classpath
  /typedef

/project


This was working fine, and I could use deco:analyse task in my build.

But then I added a presetdef in my anlib that refined analyze like this
(simplified version):

antlib xmlns:deco=antlib:net.sourceforge.deco.ant
  taskdef name=analyze
   classname=net.sourceforge.deco.ant.Analyze
/
  presetdef name=check-compile
  deco:analyze type=COMPILE
  deco:check-compile-report/
  /deco:analyze
  /presetdef

/antlib

This was failing because deco:analyze was not found when presetdef
executed.
I tried unsuccesfully to change the usage of the namespace in different way,
then I plugged a debugger and I found that the analyze task did exist, but
with the name net.sourceforge.deco.ant:analyze while
antlib:net.sourceforge.deco.ant:analyze was searched.

The fix was to change the uri used in my build from net.sourceforge.deco.ant
to antlib:net.sourceforge.deco.ant.

But what is exactly wrong?

Was my initial declaration wrong?  Should it be mandatory to use exactly the
same URI in the typedef loading the antlib than in the antlib declaration
For the moment it is not mandatory, If you don't do, you may not notice that
you don't do.  But you might have the issue I had.  In that case, we should
at least have a warning (failing would break backward compatibility).

Or are was it the intention to let the user of an antlib freely choose its
uri?  I doubt.  But if it is, how can I reference my own tasks into the
antlib.xml file ?


Gilles Scokart


Re: antlib namespace and uri usage

2009-04-23 Thread Peter Reilly
This is in the ant manual.
http://ant.apache.org/manual/CoreTypes/antlib.html#currentnamespace

There is a special xml namespace (ant:current) for typedefs defined
within an antlib.
The namespace is only active during the processing of the antlib.

Peter




On Thu, Apr 23, 2009 at 7:53 AM, Gilles Scokart gscok...@gmail.com wrote:
 Yesterday I lost 1 hour to fix an antlib namespace issue.  I have no found
 how to fix it, but I still don't clearly understand what is actually wrong
 (=what error message should ant report).

 I have an antlib defined in an XML file like this :

 antlib xmlns:deco=antlib:net.sourceforge.deco.ant
  taskdef name=analyze
           classname=net.sourceforge.deco.ant.Analyze
    /
 /antlib


 And I have my project was using it like this :

 project name=build_base xmlns:deco=net.sourceforge.deco.ant

        typedef resource=net/sourceforge/deco/ant/antlib.xml
 uri=net.sourceforge.deco.ant
            classpath
                fileset dir=${build.script.dir}/lib/
                    include name=deco*.jar/
                  /fileset
                  pathelement
 location=${build.script.dir}/lib/asm-3.1.jar /
            /classpath
          /typedef

 /project


 This was working fine, and I could use deco:analyse task in my build.

 But then I added a presetdef in my anlib that refined analyze like this
 (simplified version):

 antlib xmlns:deco=antlib:net.sourceforge.deco.ant
  taskdef name=analyze
           classname=net.sourceforge.deco.ant.Analyze
    /
  presetdef name=check-compile
          deco:analyze type=COMPILE
              deco:check-compile-report/
          /deco:analyze
  /presetdef

 /antlib

 This was failing because deco:analyze was not found when presetdef
 executed.
 I tried unsuccesfully to change the usage of the namespace in different way,
 then I plugged a debugger and I found that the analyze task did exist, but
 with the name net.sourceforge.deco.ant:analyze while
 antlib:net.sourceforge.deco.ant:analyze was searched.

 The fix was to change the uri used in my build from net.sourceforge.deco.ant
 to antlib:net.sourceforge.deco.ant.

 But what is exactly wrong?

 Was my initial declaration wrong?  Should it be mandatory to use exactly the
 same URI in the typedef loading the antlib than in the antlib declaration
 For the moment it is not mandatory, If you don't do, you may not notice that
 you don't do.  But you might have the issue I had.  In that case, we should
 at least have a warning (failing would break backward compatibility).

 Or are was it the intention to let the user of an antlib freely choose its
 uri?  I doubt.  But if it is, how can I reference my own tasks into the
 antlib.xml file ?


 Gilles Scokart


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