I spent the last few days mucking about with writing some in-depth cookbook articles on using make to build java projects but only just came across this cool series of articles about metaprogramming make today. I haven't read it all yet but i wish i'd known about using $(info ) earlier.
As a quick preview the following is a roughly minimal example of the sort of GNU Makefile i've got working:
JAVA_PROGRAMS = thing thing_JAVA_DIRS=src thing_JAVAC_LIBS=lib/library-0.jar # compile-time thing_JAR_LIBS=lib/library-0.jar # run-time & added to manifest thing_MANIFEST=thing-manifest # sets entry point or other DIST_VERSION=-0.0 DIST_NAME=thing DIST_EXTRA=Makefile java.make COPYING include java.make
This provides jar, sources, javadoc, package (binary with bundled libs, source + doc jars), and dist targets automatically. All build stages go into 'build' and all final outputs go into 'bin'.
java.make is only about 100 lines of make code, mostly a template for all the targets.
I've also started on a junit.make which does some basic junit stuff but I don't really know much about using that and running it outside of some 'mega-tool' doesn't seem very common.