Date: 2004-03-09T00:14:18
Editor: StefanBodewig <[EMAIL PROTECTED]>
Wiki: Ant Wiki
Page: NewAntFeaturesInDetail/Import
URL: http://wiki.apache.org/ant/NewAntFeaturesInDetail/Import
fix some HTML tags
Change Log:
------------------------------------------------------------------------------
@@ -19,9 +19,9 @@
----
'''How does an imported file load a resource relative to itself?'''
-By using the magic <code>ant.file.</code><em>projectname</em> property.
+By using the magic `ant.file.`''projectname'' property.
-Assume build.xml loads config/common.xml, the latter making use of a
collocated properties file config/common.properties. The way
<code><import></code> is currently implemented (I argumented against it, but
that's beside the point), common.xml cannot simply do a
<code><property file="common.properties"/></code> as if it was
stand-alone, because the project's 'basedir' will correspond to the top-most
importing build file. Ant does on the other hand store the absolute pathname of
imported build files in a magic property of the form
ant.file.<em>projectname</em>, where <em>projectname</em> is an imported
project's name (as defined by the 'name' attribute of the top-level
<code><project></code> element, and <em>NOT</em> the imported file name!). You
can thus <code><dirname></code> that absolute filename, and use the resulting
directory to locate the resource relatively to the imported build file. Here's
a full example on Windows:
+Assume build.xml loads config/common.xml, the latter making use of a
collocated properties file config/common.properties. The way <import> is
currently implemented (I argumented against it, but that's beside the point),
common.xml cannot simply do a {{{<property file="common.properties"/>}}} as if
it was stand-alone, because the project's 'basedir' will correspond to the
top-most importing build file. Ant does on the other hand store the absolute
pathname of imported build files in a magic property of the form
ant.file.''projectname'', where ''projectname'' is an imported project's name
(as defined by the 'name' attribute of the top-level <project> element, and
'''''NOT''''' the imported file name!). You can thus <dirname> that absolute
filename, and use the resulting directory to locate the resource relatively to
the imported build file. Here's a full example on Windows:
{{{
C:\oss\org_apache\antx\import16> type build.xml
@@ -81,7 +81,7 @@
Total time: 0 seconds
}}}
-Since an imported build file <em>projectname</em> is used both in itself (to
be able to locate resources relative to itself as demonstrated above) but also
potentially in all the files that will import it (to refer to its overriden
targets), changing the <em>projectname</em> of an imported build file will
almost always break its <em>client</em>s, i.e. those build files that import
it. This is a mistake IMHO, and breaks encapsulation (again, I argued against
this, but no avail.) One should therefore select those project names carefully,
lest one wants to expose itself to quite of bit of refactoring.
+Since an imported build file ''projectname'' is used both in itself (to be
able to locate resources relative to itself as demonstrated above) but also
potentially in all the files that will import it (to refer to its overriden
targets), changing the ''projectname'' of an imported build file will almost
always break its ''client''s, i.e. those build files that import it. This is a
mistake IMHO, and breaks encapsulation (again, I argued against this, but no
avail.) One should therefore select those project names carefully, lest one
wants to expose itself to quite of bit of refactoring.
----
@@ -89,7 +89,7 @@
If a target is present in both your main build file and the one that you
import, the one from your main file takes precedence.
-This means that you can write a generic build file and if you just have to
tweak it a little, you can do so by overriding a target. You even have access
to the imported target via <em>projectname</em>.<em>targetname</em>.
+This means that you can write a generic build file and if you just have to
tweak it a little, you can do so by overriding a target. You even have access
to the imported target via ''projectname''.''targetname''.
For example, let's take the simple build file from Ant's manual. Suppose it
is called "example.xml".
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]