I'm using Ant to build large C/C++/Java applications composed of many
libraries, binaries, and JARs. I factor out my common things in a few
build files in a config directory, and use one build file per
library/binary/jar that imports a common build file. This works great,
and <import> and <subant> are invaluable new Ant 1.6 tools to design
such large builds.

To get to each of the library/binary/jar build file, I have a very
simple and generic recurse.xml (shown below) build file that one
imports, just defining the buildpath to recurse into. In a typical
layout, the top-level build.xml (which imports recurse.xml) delegates to
src/lib/build.xml and src/bin/build.xml, and src/java/build.xml. These
build files then in turn delegate to their own sub-builds
(src/lib/build.xml recurses into dbtools/build.xml and utils/build.xml).
The find command below shows the test layout I setup for demoing my pb.

Before showing my pb, I've output a successful traversal of all the
build files. Then I edited src/java/build.xml to reference a directory
that does not exist in the build path: the build failed, as expected,
but where I'm getting at is that the failure stack trace just shows the
error from originating from recurse.xml with no mention of which build
files imported recurse.xml. The error message is explicit enough though
to find out what's wrong, and where.

I then added the missing directory, but not the build.xml file. The
failed again of course, and the error message is still helpful enough to
figure it out.

But now I touched the missing build.xml, which is thus empty, and this
time the error message is not helpful, and it's really hard to figure
out where the problem lies. Here is the error message and trace from the
bottom of this email:

BUILD FAILED
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line:
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line: Premature end
of file.

So basically what I requesting is that Ant outputs an error like this:

BUILD FAILED
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line:
imported from C:\oss\org_apache\antx\recurse\build.xml:5
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line: Premature end
of file.
imported from C:\oss\org_apache\antx\recurse\src\lib\build.xml:5

So that troubleshooting the issue becomes much easier.

If additionally the Premature end of file could mention which file
prematurely ended, that would be even better ;-)

Thanks, --DD

PS: FWIW, someone added a file in ClearCase, and checked in the
directory
    containing the file without checking in the file itself, resulting
in
    the empty build file. So this is a real world failure ;-)


C:\oss\org_apache\antx\recurse>dir /S /B
C:\oss\org_apache\antx\recurse\build.xml
C:\oss\org_apache\antx\recurse\config
C:\oss\org_apache\antx\recurse\src
C:\oss\org_apache\antx\recurse\config\common.xml
C:\oss\org_apache\antx\recurse\config\recurse.xml
C:\oss\org_apache\antx\recurse\src\bin
C:\oss\org_apache\antx\recurse\src\java
C:\oss\org_apache\antx\recurse\src\lib
C:\oss\org_apache\antx\recurse\src\bin\build.xml
C:\oss\org_apache\antx\recurse\src\bin\dbserver
C:\oss\org_apache\antx\recurse\src\bin\plot
C:\oss\org_apache\antx\recurse\src\bin\dbserver\build.xml
C:\oss\org_apache\antx\recurse\src\bin\plot\build.xml
C:\oss\org_apache\antx\recurse\src\java\build.xml
C:\oss\org_apache\antx\recurse\src\java\jdbserver
C:\oss\org_apache\antx\recurse\src\java\missing
C:\oss\org_apache\antx\recurse\src\java\jdbserver\build.xml
C:\oss\org_apache\antx\recurse\src\java\missing\build.xml
C:\oss\org_apache\antx\recurse\src\lib\build.xml
C:\oss\org_apache\antx\recurse\src\lib\dbtools
C:\oss\org_apache\antx\recurse\src\lib\utils
C:\oss\org_apache\antx\recurse\src\lib\dbtools\build.xml
C:\oss\org_apache\antx\recurse\src\lib\utils\build.xml

C:\oss\org_apache\antx\recurse>type src\java\build.xml
<?xml version="1.0"?>

<project name="src/java" default="build">

  <import file="../../config/recurse.xml" />

  <path id="buildpath">
    <pathelement location="jdbserver" />
    <pathelement location="missing" />
  </path>

</project>

C:\oss\org_apache\antx\recurse>type config\recurse.xml
<?xml version="1.0"?>

<project name="recurse">

  <target name="clean">
    <subant buildpathref="buildpath" target="clean" />
  </target>

  <target name="build">
    <subant buildpathref="buildpath" target="build" />
  </target>

  <target name="trace">
    <echo>Recursing from ${ant.project.name}: ${ant.file}</echo>
    <subant buildpathref="buildpath" target="trace" />
  </target>

</project>

C:\oss\org_apache\antx\recurse>
C:\oss\org_apache\antx\recurse>dir src\java\missing
 Volume in drive C has no label.
 Volume Serial Number is 6051-15B3

 Directory of C:\oss\org_apache\antx\recurse\src\java\missing

08/20/2004  10:14a      <DIR>          .
08/20/2004  10:14a      <DIR>          ..
08/20/2004  10:14a                   0 build.xml
               1 File(s)              0 bytes
               2 Dir(s)   2,265,778,688 bytes free

C:\oss\org_apache\antx\recurse>

C:\oss\org_apache\antx\recurse>C:\pro\ant\1.6.2\bin\ant trace
Buildfile: build.xml

trace:
     [echo] Recursing from recurse-demo:
C:\oss\org_apache\antx\recurse\build.xml

trace:
     [echo] Recursing from src/lib:
C:\oss\org_apache\antx\recurse\src\lib\build.xml

trace:
     [echo] Recursed into utils:
C:\oss\org_apache\antx\recurse\src\lib\utils\build.xml

trace:
     [echo] Recursed into dbtools:
C:\oss\org_apache\antx\recurse\src\lib\dbtools\build.xml

trace:
     [echo] Recursing from src/bin:
C:\oss\org_apache\antx\recurse\src\bin\build.xml

trace:
     [echo] Recursed into dbserver:
C:\oss\org_apache\antx\recurse\src\bin\dbserver\build.xml

trace:
     [echo] Recursed into plot:
C:\oss\org_apache\antx\recurse\src\bin\plot\build.xml

trace:
     [echo] Recursing from src/java:
C:\oss\org_apache\antx\recurse\src\java\build.xml

trace:
     [echo] Recursed into jdbserver:
C:\oss\org_apache\antx\recurse\src\java\jdbserver\build.xml

BUILD SUCCESSFUL
Total time: 1 second
C:\oss\org_apache\antx\recurse>
C:\oss\org_apache\antx\recurse>C:\pro\ant\1.6.2\bin\ant trace
Buildfile: build.xml
...
trace:
     [echo] Recursing from src/java:
C:\oss\org_apache\antx\recurse\src\java\build.xml

trace:
     [echo] Recursed into jdbserver:
C:\oss\org_apache\antx\recurse\src\java\jdbserver\build.xml

BUILD FAILED
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line:
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   Invalid file: C:\oss\org_apache\antx\recurse\src\java\missing

Total time: 1 second
C:\oss\org_apache\antx\recurse>md src\java\missing
C:\oss\org_apache\antx\recurse>C:\pro\ant\1.6.2\bin\ant trace
Buildfile: build.xml
...
trace:
     [echo] Recursing from src/java:
C:\oss\org_apache\antx\recurse\src\java\build.xml

trace:
     [echo] Recursed into jdbserver:
C:\oss\org_apache\antx\recurse\src\java\jdbserver\build.xml

BUILD FAILED
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line:
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   Invalid file:
C:\oss\org_apache\antx\recurse\src\java\missing\build.xml

Total time: 1 second
C:\oss\org_apache\antx\recurse>touch src\java\missing\build.xml
C:\oss\org_apache\antx\recurse>C:\pro\ant\1.6.2\bin\ant trace
Buildfile: build.xml
...
trace:
     [echo] Recursing from src/java:
C:\oss\org_apache\antx\recurse\src\java\build.xml

trace:
     [echo] Recursed into jdbserver:
C:\oss\org_apache\antx\recurse\src\java\jdbserver\build.xml

BUILD FAILED
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line:
C:\oss\org_apache\antx\recurse\config\recurse.xml:15:
   The following error occurred while executing this line: Premature end
of file.

Total time: 1 second
C:\oss\org_apache\antx\recurse>

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

Reply via email to