I've been looking at various ways of importing other ant buildfiles
from the classpath to reduce coupling in my multimodule build. This would
allow me to checkout only the code and build files I intend to
change.

I've been looking at using Maven to facilitate this. My solution uses
the maven ant-run plugin to run a build.xml file with a classpath
that includes a file echo.xml on which build.xml depends (see diagram below).

However, this requires a few modifications to both ant and the ant-run
plugin.

The modification to the ant-run plugin is pretty trivial, we
just need it to use ant 1.8.1 so we can put <javaresource/> types inside
<import/>, this basically a change to the ant-run pom.xml so that we bring
ant 1.8.1 onto the classpath instead of 1.7.1. We then reinstall the
ant-run plugin into our
repository.

Somewhat more siginificant is the change to ant. To support this mechanism
we need to be able inherit references in the file being called by the
"Ant" task. The Ant tasks supports this, but what is not clear is that
it will not export references in the preamble of an ant build file.
References are only available within targets. However, since the
<import/> element
cannot exist within a <target/> making references in the preable is really
necessary in order for this to work.

Hence, I made a change to the "Ant" task, so that it brings in import references
before the file (build.xml in the example) is parsed. Consequently, the
references should be available in the preamble.

The example I have given seems to work ok with this code change.

I would like to ask if this tweak to the ant task code is a good idea and
whether there is any chance of it or something similar being adopted
in ant itself.

The change is only one line, but I am worried I might be missing some serious
consequences.

I attach a patch for the ant task which should apply cleanly to the
ANT_181 tag on svn.

-------
Example
-------


BuildCommon Project:
--------------------

BuildCommon
|
+-src
| |
| +-resources
|   |
|   +echo.xml // the ant file I want to import.
|
+-pom.xml // bog standard pom, builds a jar which has echo.xml at the root


echo.xml:
*********
<project name="echo">


<target name="echo">
<echo>Hello Modular Ant World!! </echo>
</target>

</project>


BuildClient Project:
--------------------

BuildClient
|
+-pom.xml // standard pom, with ant-run executing build.xml in "compile" phase
|
+-build.xml // the ant file with classpath dependencies that we want to run.

pom.xml
*******
// ... standard pom header

<build>
   <plugins>
     <plugin>
       <artifactId>maven-antrun-plugin</artifactId>
       <executions>
         <execution>
           <phase>compile</phase>
           <configuration>
             <tasks>

<ant antfile="build.xml" target="echo" inheritrefs="true"/>

             </tasks>
           </configuration>
           <goals>
             <goal>run</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>
 </build>

// ... dependencies


build.xml
*********
<project name="BuildClient">

<import>
<javaresource name="echo.xml">
<classpath refid="maven.compile.classpath" />
</javaresource>
</import>

</project>

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

Reply via email to