I'm adding this as an answer since it contains code, but it's mostly an expansion on gerrytan's answer.
If you're using the Azure Eclipse plugin, you can edit package.xml in the Azure deployment project so eclipse will build your war automatically and rename it to ROOT.war before placing it in the deployment project.
Near the end of package.xml, you should have a line like this:
<component cloudmethod="copy" cloudsrc="auto" cloudupload="always" deploydir="%SERVER_APPS_LOCATION%" deploymethod="copy" importas="<my_app.war>" importmethod="auto" importsrc="<path to my_app project>" type="server.app"/>
(It should be within the workerrole tag)
In this line, replace "" with "ROOT.war" so it looks like this:
<component cloudmethod="copy" cloudsrc="auto" cloudupload="always" deploydir="%SERVER_APPS_LOCATION%" deploymethod="copy" importas="ROOT.war" importmethod="auto" importsrc="<path to my_app project>" type="server.app"/>
and delete the old my_app.war from deployment. When you deploy next time, you app will be deployed as ROOT. And as gerrytan said, make sure you delete the /webapps/ROOT
folder in tomcat beforehand.
EDIT:
Another caveat - If your application includes a .gitignore file (or a similar dot file/directory like .svn), add <defaultexcludes remove="**/.gitignore"/>
to package.xml under the windowsazurepackage taskdef.
Without this, the Azure plugin (that uses Ant) doesn't delete .gitignore files between Azure deployments. This means that the application's folder in the webapp folder stays when everything else is deleted. When Azure is re-deployed, tomcat doesn't re-deploy the application because it sees that the application's folder is there.