I found the original ejb tasks in Ant (somewhere around the 1.3 version) insufficient as they didn't understand EJB2.0 and WLS 6.x extensions properly, and forced descriptors to be scattered around the filesystem (as they still do). I'd rather have descriptors all together in one directory; when you're applying (e.g.) security across beans and across descriptors, the fewer files the better.
But the Ant jar and zip tasks are so configurable, that it's trivial to write your own ear/ejb/war target anyhow.
If you're doing anything with EJB, use Ant.
If you're doing anything with Java, use Ant.
If you want integration with JBuilder, use AntRunner, and you're fixed.
This all works perfectly across platforms too. We have exactly the same build scripts for NT and Solaris, maintained once per project. Ideal.