DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=29986>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=29986

Recursive dependencies.

           Summary: Recursive dependencies.
           Product: Ant
           Version: 1.6.1
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Enhancement
          Priority: Other
         Component: Build Process
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


To quickly sum up my issue, I have two separate but dependent projects.  These
projects both <import file="../build-master.xml" />.  They both call the jar
target, which depends on compile, which depends on dependencies.  The idea
behind this process is that each project can build the projects that it depends
upon, and that this process can be done recursively down to the foundation
project that depends on no other projects.

The problem is that when projectA calls the dependencies target which uses
subant to call the dependencies target on projectB (which projectA depends upon)
Ant barfs with the following trace:

Start Trace ---
C:\dev\home\dfaFinSys\project\travel_web>ant -v compile
Apache Ant version 1.6.1 compiled on February 12 2004
Buildfile: build.xml
Detected Java version: 1.4 in: C:\j2sdk1.4.2_04\jre
Detected OS: Windows XP
parsing buildfile C:\dev\home\dfaFinSys\project\travel_web\build.xml with URI =
file:///C:/dev/home/dfaFinSys/project/travel_web/build.xml
Project base dir set to: C:\dev\home\dfaFinSys\project\travel_web
 [property] Loading C:\Documents and Settings\Evans\ant.properties
 [property] Unable to find property file: C:\Documents and
Settings\Evans\ant.properties
 [property] Loading C:\dev\home\dfaFinSys\project\travel_web\build.properties
 [property] Loading C:\dev\home\dfaFinSys\project\build-master.properties
Importing file ../build-master.xml from
C:\dev\home\dfaFinSys\project\travel_web\build.xml
parsing buildfile C:\dev\home\dfaFinSys\project\build-master.xml with URI =
file:///C:/dev/home/dfaFinSys/project/build-master.xml
Overriding previous definition of reference to dfa_project.dependencies
 [property] Loading Environment env.
Build sequence for target `compile' is [dependencies, compile]
Complete build sequence is [dependencies, compile, setup-workspace, init, clean,
jar, war, ]

dependencies:
   [subant] calling target jar in build file
C:\dev\home\dfaFinSys\project\travel_web\build.xml
parsing buildfile C:\dev\home\dfaFinSys\project\travel_web\build.xml with URI =
file:///C:/dev/home/dfaFinSys/project/travel_web/build.xml
Project base dir set to: C:\dev\home\dfaFinSys\project\travel_web
 [property] Loading C:\Documents and Settings\Evans\ant.properties
 [property] Unable to find property file: C:\Documents and
Settings\Evans\ant.properties
 [property] Loading C:\dev\home\dfaFinSys\project\travel_web\build.properties
 [property] Loading C:\dev\home\dfaFinSys\project\build-master.properties
Importing file ../build-master.xml from
C:\dev\home\dfaFinSys\project\travel_web\build.xml
parsing buildfile C:\dev\home\dfaFinSys\project\build-master.xml with URI =
file:///C:/dev/home/dfaFinSys/project/build-master.xml
Overriding previous definition of reference to dfa_project.dependencies
 [property] Loading Environment env.
Build sequence for target `jar' is [dependencies, compile, jar]
Complete build sequence is [dependencies, compile, jar, setup-workspace, init,
clean, war, ]

BUILD FAILED
C:\dev\home\dfaFinSys\project\build-master.xml:145: subant task calling a target
that depends on its parent target 'dependencies'.
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:368)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:182)
        at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:112)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:269)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:301)
        at org.apache.tools.ant.Target.performTasks(Target.java:328)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1215)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1063)
        at org.apache.tools.ant.Main.runBuild(Main.java:632)
        at org.apache.tools.ant.Main.startAnt(Main.java:183)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:197)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:56)

Total time: 1 second
C:\dev\home\dfaFinSys\project\travel_web>
Stop Trace ----

Here's my project directory structure:

projects/
projects/build-master.xml
projects/build-master.properties
projects/apples/build.xml
projects/apples/build.properties
projects/apples/src/
projects/apples/classes/
projects/bananas/build.xml
projects/bananas/build.properties
projects/bananas/src/
projects/bananas/classes/
projects/oranges/build.xml
projects/oranges/build.properties
projects/oranges/src/
projects/oranges/classes/

Each build.xml (project build file) looks like this:

<project name="apples" default="init" basedir=".">
  <patternset id="dfa_project.dependencies">
    <include name="oranges" />
  </patternset>
  <property file="${user.home}/ant.properties" />
  <property file="build.properties" />
  <property file="../build-master.properties" />
  <import file="../build-master.xml" />
</project>

build-master.xml defines all of the targets and sets up things like the build
classpath etc.  All of the projects have some level of dependency on the other
projects.  To handle building the project dependencies I have the following
target in build-master.xml:

  <!-- Build Prerequisite Projects -->
  <target
    name="dependencies">
        <subant
          target="jar">
          <dirset dir=".">
            <patternset
                  id="dfa_project.dependencies" />
          </dirset>
        </subant>
  </target>

And the compile target looks like this (depends on dependencies target):

  <!-- Default Source Compilation -->
  <target name="compile" depends="dependencies">
    <javac srcdir="${dfa_project.src}" 
      destdir="${dfa_project.compile}">
      <classpath>
        <path refid="libs.build" />
      </classpath>
    </javac>
  </target>

Is there some way to get around this?  Or am I going to have to just duplicate
the bodies of the targets and define targets named "apples-compile, apples-jar,
oranges-compile, oranges-jar" etc.

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

Reply via email to