From 753a6c60f47f3ac4f270005b65e9d6481de8eb68 Mon Sep 17 00:00:00 2001
From: Ashlee Young
+The
+Ant' default
+The immediate benefit of a such abstraction it that it is possible to make Ant
+understand other kind of descriptive languages than XML. Some experiments have
+been done around a pure java frontend, and a groovy one too (ask the dev mailing
+list for further info about these).
+ Since Ant 1.8.2, the import task will also
+try to use the proper helper to parse the imported file. So it is possible to
+write different build files in different languages and have them import each
+other.
+
+Ant knows about several implementations of At startup Ant lists the all implementations found and keeps them
+in the same order they've been found in an internal 'repository':
+The Apache Ant frontend: ProjectHelper
+
+What is a ProjectHelper?
+
+ProjectHelper
in Apache Ant is responsible for parsing the build file
+and creating java instances representing the build workflow. It also signals which
+kind of file it can parse, and which file name it expects as default input file.
+ProjectHelper
+(org.apache.tools.ant.helper.ProjectHelper2
) parses the
+usual build.xml files. And if no build file is specified on the command line, it
+will expect to find a file named build.xml
.
+How is Ant is selecting the proper ProjectHelper
+
+ProjectHelper
+and has to decide which to use for each build file.
+
+
+In case of an error while trying to instanciate a org.apache.tools.ant.ProjectHelper
(see
+ Java System Properties);ProjectHelper
+ service declarations in the META-INF: it searches in the classpath for a
+ file META-INF/services/org.apache.tools.ant.ProjectHelper
.
+ This file will just contain the fully qualified name of the
+ implementation of ProjectHelper
to instanciate;ProjectHelper
service declarations in the META-INF;ProjectHelper
+ that can parse classical build.xml files.ProjectHelper
, Ant
+will log an error but won't stop. If you want further debugging
+info about the ProjectHelper
internal 'repository', use the system
+property ant.project-helper-repo.debug
and set it to
+true
; the full stack trace will then also be printed.
+
+When Ant is expected to parse a file, it will ask the
+ProjectHelper
repository to find an implementation that will be
+able to parse the input file. Actually it will just iterate over the ordered list
+and the first implementation that returns true
to
+supportsBuildFile(File buildFile)
will be selected.
+
+When Ant is started and no input file has been specified, it will search for
+a default input file. It will iterate over list of ProjectHelper
s
+and will select the first one that expects a default file that actually exist.
+
+The class org.apache.tools.ant.ProjectHelper
is the API expected to
+be implemented. So write your own ProjectHelper
by extending that
+abstract class. You are then expected to implement at least the function
+parse(Project project, Object source)
. Note also that your
+implementation will be instanciated by Ant, and it is expecting a default
+constructor with no arguments.
+
+There are some functions that will help you define what your helper is +capable of and what is is expecting: +
getDefaultBuildFile()
: defines which file name is expected if
+ none providedsupportsBuildFile(File buildFile)
: defines if your parser
+ can parse the input filecanParseAntlibDescriptor(URL url)
: whether your
+ implementation is capable of parsing a given Antlib
+ descriptor. The base class returns false
parseAntlibDescriptor(Project containingProject, URL
+ source)
: invoked to actually parse the Antlib
+ descriptor if your implementation returned true
+ for the previous method.+Now that you have your implementation ready, you have to declare it to Ant. Three +solutions here: +
org.apache.tools.ant.ProjectHelper
+ (see also the Java System Properties);META-INF/services/org.apache.tools.ant.ProjectHelper
.
+ And then in this file just put the fully qualified name of your
+ implementation