Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Ant Wiki" for change 
notification.

The "NewAntFeaturesInDetail/Import" page has been changed by Jon Cox:
http://wiki.apache.org/ant/NewAntFeaturesInDetail/Import?action=diff&rev1=5&rev2=6

   * Entity includes require a DOCTYPE declaration and thus have their roots in 
DTD systems.  If you have an XML-Schema or Relax-NG gramar for Ant build files, 
the two are hard to combine.
  
   * You must not use <import> inside a <target> (or <sequential>), while there 
is no such limitation for entity includes.
+ 
+ 
+ <import> is a boon to multi-project builds because it lets you keep all 
dependencies in a single DAG  (c.f: "Recursive Make Considered Harmful"),
+ in a multi-project build.   For example,  suppose build.xml does an <import> 
of two projects named "x", and "y", and that both "x" and "y" 
+ have targets named  "moo".   Any target in any of the projects can make an 
explicit reference to target "x.moo"  or "y.moo" in its depends clause. 
+ This feature is wonderful, but is woefully under-documented, and has least 
two nasty flaws:
+ 
+   *  Names of targets within a project aren't bound tighter than names 
external to a build file.   Therefore, if project "x" is imported first, then 
project "y",
+      and a target in "y" depends on "moo", then ant will interpret that as 
"x.moo",  NOT "y.moo".  That's particularly scary when you consider that the 
world of
+      targets that can potentially be imported is huge and a dependency 
hijacking could be both silent and in a remote file elsewhere in a big build. 
+ 
+   *  Targets in the top-level don't get a magical  
''projectname''.''targetname'' alias.   You can only refer to them by their 
unadorned  ''targetname''.
+      This is evil because what happens if a target in the top level gets 
moved elsewhere?   At that point you're right back to the first problem 
mentioned
+      of being subject to silent dependency hijacking.   As of Ant 1.7, you 
cannot refer to the targets in the main build file explicitly, so there's no 
+      workaround for this one other than knowing about it & being careful. 
  
  ----
  '''How does an imported file load a resource relative to itself?'''

Reply via email to