How about a smart deployer for exploded wars.
But if a java file got changed, then redeploy the whole war.
It's part of the idea.
You basically just set up a set of include/excludes that states e.g. build/classes/**/*.class goes to /your.war/your.jar and webcontent/**/* goes to /your.war/WEB-INF etc.
Then when a resource is changed it is matched against these include/excludes to see if it needs copying or deletion.
The idea is then for each exclude/include to tell if a certain action needs execution (e.g. touch a descriptor)
The last part won't be in the first release coming up soon afaik (marshall/rob?), but the rest is there now.