i also had 'asadmin start-domain' hanging. here is how i got around it in case this helps others. (none of the other proposed solutions worked for me) i should mention that i'm using GF 2.1.1 and the original user was using v3 so there may be some differences there:
---
<parallel>
<daemons>
<exec executable="${asadmin}" failonerror="true" vmlauncher="false">
<arg line="start-domain ${domain.name}"/>
</exec>
</daemons>
</parallel>
<waitfor maxwait="${gf.wait.seconds}" maxwaitunit="second" timeoutproperty="timed.out">
<socket server="localhost" port="${gf.admin.port}"/>
</waitfor>
---
when started in a <daemon> Glassfish doesn't hang the script but it will return so quickly that GF will not have started so I put in a <waitfor> so that the rest of the script won't run until glassfish is responding on the admin port or the timeout has been reached.
[Message sent by forum member 'euqaz' (java.net_at_euqaz.net)]
http://forums.java.net/jive/thread.jspa?messageID=381778