Eventually the Ant import task came along and we now use that.
That way the project specific stuff stays very small, all projects have the same set of commands - but you can still customise relatively easily if you really need to.
I find it funny when people blame the messy complexity of some build script on the tool rather than the people who built it...
The key trick is to reuse common tasks between different projects by importing them. Originally we did this using XML entities.
https://ant.apache.org/faq.html#xml-entity-include
Eventually the Ant import task came along and we now use that.
That way the project specific stuff stays very small, all projects have the same set of commands - but you can still customise relatively easily if you really need to.
I find it funny when people blame the messy complexity of some build script on the tool rather than the people who built it...