ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Turner <je...@apache.org>
Subject Re: Cross Project Dependencies
Date Sun, 18 Aug 2002 04:05:10 GMT
On Fri, Aug 16, 2002 at 10:54:17AM -0400, Grinvald, Edward wrote:
> Hello all,
> 	I have a problem, which i hope you can help me solve: My project has
> 	several subprojects, let's say a - z.  Some of the subprojects depend
> 	on other subprojects. Let's say a depends on b and c, c depends on d
> 	and e, and e depends on f. Assum there are no circular dependencies
> 	(i hope there aren't). Each subproject is in a separate directory, so
> 	i can say build in a subdirectory, jar, put in 'lib', build in b
> 	subdirectory, jar, put in 'lib', etc.  I am trying to make it so that
> 	the user can say he/she wants to build a, and it will go to a, read
> 	dependencies on b and c (from a text file or something), go to build
> 	b, see dependency on d and e, etc.  I see no way to do this other
> 	then recursion, but i'm having difficulties, because i don't fully
> 	understand how recursion would work in ant - would the properties be
> 	mixed up if i invoke the same target multiple times, etc.

In Avalon's Excalibur project, we had the same issue of building a large
number of subprojects with many interdependencies. While waiting for a
better solution (maven's reactor is quite nice), we're using a script
that recursively builds projects, and checks to see if they're already
built before rebuilding. All straight Ant 1.4. A subproject would use it
as follows:

<project name="Excalibur Fortress" default="main" basedir=".">
  ...
  <target name="dependencies" description="Check dependencies" unless="skip.dependencies">
    <ant antfile="../depchecker.xml" target="checkCommon"/>
    <ant antfile="../depchecker.xml" target="checkFramework"/>
    <ant antfile="../depchecker.xml" target="checkLogkit"/>
    <ant antfile="../depchecker.xml" target="checkAltrmi"/>
    <ant antfile="../depchecker.xml" target="checkCollections"/>
    <ant antfile="../depchecker.xml" target="checkInstrument"/>
    <ant antfile="../depchecker.xml" target="checkInstrumentManager"/>
    <ant antfile="../depchecker.xml" target="checkSourceResolve"/>
    <ant antfile="../depchecker.xml" target="checkEvent"/>
  </target>

  <target name="compile" depends="dependencies" description="Compiles the source code">
    ...
  </target>
</project>

In depchecker.xml, the checkXxx targets all reuse the same checkRequiredFile or
checkRequiredClass targets. There is support for downloading missing
dependencies, eg checkJUnit could fetch junit.jar from an online repository (see
ibiblio.org/maven)

It's a hack, but then everything in Ant is a hack when you get beyond a certain
level of complexity ;) If you'd like to reuse this, checkout the
jakarta-avalon-excalibur module. The dependency checking is all in
depchecker.xml and quite reusable.


--Jeff

> Please help.
> 
> Thank You,
> 
> Edward Grinvald
> Computer Associates International
> Programmer, Storage Development
> Edward.Grinvald@ca.com
> (631) 342 6350
> 

-- 
Hell is a state of mind. And every state of mind, left to itself,
every shutting up of the creature within the dungeon of it's own
mind -- is, in the end, Hell.
  C.S. Lewis, _The Great Divorce_

--
To unsubscribe, e-mail:   <mailto:ant-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-user-help@jakarta.apache.org>


Mime
View raw message