On 4/25/06, Andrew Goodnough <[EMAIL PROTECTED]> wrote:
>>> On Tue, Apr 25, 2006 at 11:13 am, in message
<[EMAIL PROTECTED]>, "Andrew
Close"
<[EMAIL PROTECTED]> wrote:
> hello,
>
> i'm having a bit of a brain- fart coming up with a solution to this
> situation.  we have about 130 JAR files that we are building for a
> particular project.  most of these JARs are dependent on each other
so
> they require a specific build order.  i was hoping to create a list
of
> the projects that compose each JAR and feed this list to ANT to
build
> one at a time.  i know the Ant- Contrib project has a <foreach> tag
> that allows for iteration, but i'm a bit stumped on how to build
> everything from a properties file.  is this possible?  or is there a
> better way to approach this?
>
> we're using VSS as source control and have several projects that are
> composed of several (130+) products/JARs in VSS.  so i'd like to
make
> a list of Project.Product that i can iterate through and
> build/JAR/deploy in order.
> so in VSS we may have Project1 that contains ProductA, ProductB &
> ProductC and Project2 that contains ProductD & ProductE and Project3
> that contains ProductF, ProductG & ProductH.  the build order may
end
> up being:
> ProductB, ProductG, ProductA, ProductC, ProductD, ProductF,
ProductE...
> so my initial idea was to create a master list that contains these
> products in their proper build order:
> Project1.ProductB
> Project3.ProductG
> Project1.ProductA
> Project1.ProductC
> Project2.ProductD
> Project3.ProductF
> Project2.ProductE
>
> our ANT build file is currently set up to build products
individually.
>  so typically we'd pass in the ProjectName, ProductName, Branch,
> DeliverableType and DeploymentDest to build one product/JAR/etc.  to
> build all applications (build world) we have to either type this in
> manually 130+ times or we use a .bat file that makes 130+ calls.
the
> problem with the .bat file is that if product 15 fails a bunch of
> builds that follow will fail due to dependency.  there is no good
way
> to stop the build process on error.  so i was hoping ANT would be
able
> to come to the rescue. :)
> hopefully this is enough background to either come up with a
solution
> or generate some discussion that will lead to a solution.
> thanks for any help you can offer.
>
>
---------------------------------------------------------------------
> To unsubscribe, e- mail: user- [EMAIL PROTECTED]
> For additional commands, e- mail: user- [EMAIL PROTECTED]

We have a large amount of projects with interdependencies, too.  Our
process sets up a set of files (with pre-defined names) which allow the
project owner to configure dependencies, including triggering
sub-builds, in any.  First, here's how the classpath is setup for the
compile.  The "includesfile" property includes from the files.

  <path id="project.class.path">
    <dirset dir=".." includesfile="${classes.depend.file}"/>
    <fileset dir="${lib.dir}" includesfile="${jars.depend.file}"/>
    <fileset dir="${sharedlib.dir}"
includesfile="${sharedjars.depend.file}"/>
  </path>

A typical jars.depend file looks like this:

===jars.depend===
xml-apis.jar
xerces-2_0_1.jar
xalan-j_2_3_1.jar
=============

and

===classes.depend===
Global-Utils/build/classes
Parent-Proj/build/classes
===============


Second, if in addition to including the classes from Global-Utils and
Parent-Proj, you want this project to build both projects before
building itself, then have your compile target depend on sub-compile
target like:

  <target name="compile-subprojects">
    <subant target="compile">
      <dirset dir=".." includesfile="${projects.depend.file}"/>
    </subant>
  </target>

  <target name="compile" depends="init,compile-subprojects"
description="Compiles the source files">
    <javac srcdir="${src.dir}"
           destdir="${build.classes}">
        <classpath refid="project.class.path"/>
    </javac>
  </target>


where you put the 2 projects in the projects.depend:

===projects.depend===
Global-Utils
Parent-Proj
===============


Each project must have standard target names to use this scheme, but it
scales well.  We use Entity references to gain a type of inheritance in
Ant to reuse common targets but that's another topic.  Good luck!


Andy,

thanks for your reply.
so do you have a single task/target that you kick off that builds
everything for you?    would i end up with 130+ individual targets
that depend on each other in your scenario?
i.e:

<target name="ProductA">
 <ant antfile="jar.xml" dir="build.dir" target="all" >
   <property name="ProductA" ... />
 </ant>
</target>

<target name="ProductB" depends="ProductA>
  <ant antfile="jar.xml" dir="build.dir" target="all" >
   <property name="ProductB" ... />
 </ant>
</target>

<target name="ProductC" depends="ProductB>
  <ant antfile="jar.xml" dir="build.dir" target="all" >
   <property name="ProductC" ... />
 </ant>
</target>

this scenario is what i was hoping to avoid by building a list of
projects to be build in the correct order.  maybe i'm missing
something though...

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to