How is it more declarative than the Makefile language?
You declare targets and dependencies and the steps within are target a executed procedurally in sequence.
This sentence is 100% true for both Ant and Make.
Ugly, yes. It was developed during the times when everything had to be XML. But also Makefiles don't win a beauty contest.
Terrible. Maybe, but not worse than trying to write portable Makefile for something non-trivial (e.g. libraries).
Limiting? In what way? You are encouraged to use the supplied tasks which cover a lot. Creating new tasks would be done in the language you programming. You can still execute any arbitrary command if you really want to.
In ant, to declare a target for any no direct code generator is a royal pain. Even worse than in Make.
Ant is declarative in that you do not directly refer to files except in tasks that directly handle files. You cannot say that phony task x depends on file y.
Still ugly and terrible and limiting.