At work, we’re using mercurial for our source control. As we’ve released code to production we’ve needed to branch our repository to support what’s in production as well as ongoing development.
By default, grails uses
~/.grails as the working directory. If you’re doing branchy development, you can run into problems with this if you’ve got plugins installed in one branch that aren’t in the other. Having a unique directory per branch prevents you from having to run
grails clean all the time.
Here’s a quick shell script that changes the grails working directory to have the branch name as a suffix if your source is contained in a mercurial repository (ex: the default branch would be
~/.grails_default and the 1.0 branch would be
~/.grails_1.0). If your application is not in a repo, it just uses the regular
#!/bin/sh HG_BRANCH=`hg branch 2>/dev/null` GRAILS_SCRIPT=$GRAILS_HOME/bin/grails if [ $HG_BRANCH ]; then GRAILS_WORK_DIR=`echo ~`/.grails_$HG_BRANCH echo "** grails working directory: $GRAILS_WORK_DIR" $GRAILS_SCRIPT -Dgrails.work.dir=$GRAILS_WORK_DIR $@ else echo "** default grails working directory" $GRAILS_SCRIPT $@ fi
Just save this script as “grails” and put it in your PATH before the $GRAILS_HOME/bin directory (also make sure that you’ve defined $GRAILS_HOME). I have a ~/bin directory that’s the first thing in my PATH.
If you use the grails-debug command, you can repeat these steps for that, just change
This same technique could easily be modified to be used for other source control systems such as git or subversion.