Hi all, I've created a new build.xml for HttpAsync. Here are the general ideas.
There are several logical groups of source files. In HttpAsync, these are "src/java" (main classes), "src/test" (test classes), "src/contrib" (contributions) and "src/examples" (examples). In other components, there may be more. For example, HttpCore may split "src/java" in two, one which is 1.3 compatible and one for NIO. HttpCore may also split "src/contrib" in two, one that does depend on the Spring framework and one that doesn't. You get the idea. For each logical group of source files, there are two targets: one compiles source files that have changed, the other one removes the compilation result. If you want to force recompilation, you can execute the clean target followed by the compilation target. There is also a target that combines all logical groups. In HttpAsync, the targets for the logical groups are: compile-src clean-src compile-tests clean-tests compile-examples clean-examples compile-contrib clean-contrib compile-all clean-compile The targets for the logical groups do NOT define dependencies. That's because I've had problems with unwanted dependencies before. If you start from scratch and want to compile the examples, you have to compile the main src first. But that's not a big deal, as there are more comfortable targets to use anyway. HttpAsync can assemble two JARs, one for the main classes and one for the examples and contributions. These do define dependencies. There are two targets for each of these JARs, one that compiles only the modified classes and one that enforces recompilation of all classes. The latter has a suffix -fs, meaning "from scratch". package-src package-src-fs package-addon package-addon-fs The default target is "package-src". In the old build, it was "compile". But I've always considered JARs to be build results and compiled classes to be intermediate, temporary files :-) There are targets to execute unit tests and to run Clover. These do define dependencies. For running unit tests, there are two targets, one that compiles only the modified classes and one that enforces recompilation of all classes. For Clover there is only one target that always enforces recompilation, since the source needs to be instrumented for this specific occasion. run-tests run-tests-fs run-clover A findbugs target is still missing. I've never used findbugs before and I thought learning Clover was enough for today :-) There are two JavaDoc targets, one for only the "src/java" classes and one that additionally includes the examples and contributions. JavaDoc does not depend on compiling anymore. javadoc-src javadoc-addon (including src) I've added groups to the JavaDocs to separate API classes, implementation classes, examples, and contributions. There are some more targets for cleanup: clean-build - removes ${build.home} clean-dist - removes ${dist.home} clean-docs - removes ${dist.docs} clean-api - removes ${dist.api} (JavaDocs) And there is a target echo-properties which only prints some important Ant properties. That comes in handy if you are defining your local build.properties and want to be sure that the values are picked up correctly by Ant. To ease the migration, there is a set of traditional targets: compile, package, javadoc, test, clover, clean I've made some changes to the property names used internally, please have a look at the build file if you want to review them. The local build properties no longer have a search path as before. The properties are read from only one file. The default location is in ../project/build.properties, but can be overridden when Ant is called: > ant -Dlocal.properties=/home/rolandw/http/build.properties I've changed the default version to "SNAPSHOT", without an additional version number. The version numbers are already in too many places for my liking. I'm thinking about letting Maven call Ant for building in the future, in which case it would simply override that property to the correct value. There are some differences to the build files I write at work. The biggest is that I don't have separate compilation and packaging targets there. But I've kept that distinction from the old build process and Maven. As mentioned above, I am thinking about letting Maven call Ant, and then we'll need those steps separately. Another difference is that at work, I'm generating a timestamp file that has the build time in it's name. That file is packaged into every JAR below META-INF, so that "jar tf" will give access to the timestamp. If the project has a versioning scheme, the version is also in the filename. If you like the idea, I'll add it here too. So, that's it for today. Please let me know what you think. If we can finish the reviews this week, I would spend some time next weekend to move HttpCore and HttpClient to the new build process. cheers, Roland --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]