Stefan Bodewig schrieb am 23.08.2010 um 06:05 (+0200):
> On 2010-08-23, Michael Ludwig wrote:
> 
> > I'm wondering what's the difference between <path> and <classpath>.
> > Why are there these two construct? Aren't they functionally
> > identical?
> 
> Ant contains a type - a thing you can define outside of tasks - called
> <path>.  This Ant type is backed by a Java class named Path.
> 
> Some tasks support nested elements that are implemented by that same
> Java class.  Some tasks class it <path>, others call it <classpath>
> and there are even more names used by tasks.
> 
> This means that you can use <path id="foo"> somewhere outside of a
> task and use that via <classpath refid="foo"/> in a task that calls
> its nested element <classpath>.

Very good! I think I got it:

<project default="build">
  <property name="dest.dir" location="dest"/>
  <path id="class-path"><!-- This must be <path>, not <classpath>! -->
    <pathelement location="lib"/>
  </path>
  <target name="build">
    <javac srcdir="src" destdir="dest" classpathref="class-path"
      includeAntRuntime="no"/>
    <!-- Genauso gut geht es so: -->
    <!--
    <javac srcdir="src" destdir="dest" includeAntRuntime="no">
      <classpath refid="class-path"/>
    </javac>
    -->
  </target>
</project>

> > Is it correct to say that the whole <path>/<classpath> thing can be
> > explained historically by reference to the <javac> task? Which sports
> > @classpath, @sourcepath, @bootclasspath and @extdirs, all <path> types?
> 
> Not really.
> 
> <javac> is a good example, it needs four different types of path
> structures so it needs four different names for them.

Good point. :-)

> For the thing you can define outside of tasks, we need only one name
> and <path> is the most generic one.
> 
> > So are <path> and <classpath> interchangeable?
> 
> Structurally, yes.  But if the task calls its nested element
> <classpath> then you have to use that name and can't call it <path>.

And you have to use <path> if you want to refer to the path
structure by, say, javac/@classpathref. You cannot refer to
some classpath/@id, it has to be path/@id.

Perfect, you've made it clear to me know! Thanks!
-- 
Michael Ludwig

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

Reply via email to