tags:

views:

286

answers:

5

We've been using Grails for a little while now and have been through a few Grails versions now. We don't always want to migrate our 'older' apps immediately but often use a newer version for new development. Changing the Windows environment variables is inconvenient since I sometimes have to work on two related projects at the same time that are running different versions of Grails.

In Linux, I'd probably create wrapper scripts or aliases to allow me to specify on the command line a version switch but I don't believe Grails supports this.

How are others that need to code against multiple versions of Grails managing it?

Update:
I created a gv.bat file to set the GRAILS_HOME and PATH environment variables. I added a GRAILS_INSTALLS environment variable (c:\usr\local\grails on my box) and removed the %GRAILS_HOME%\bin reference from my PATH.

gv.bat

@echo off
SET GRAILS_HOME=%GRAILS_INSTALLS%\grails-%1
SET PATH=%GRAILS_HOME%\bin;%PATH%

To do any Grails work I run > gv 1.1.2 or whatever version I need to work with. I'd like to figure out how to do a string replace in the PATH to change the value but that turned out to be difficult for me

+1  A: 

I have a couple of bat files which changes the GRAILS_HOME and the system PATH according to which version I'm using.

It's not the most beautifull solution at all, but at least works for me.

Kico Lobo
Are they long, would you mind posting the one that updates the PATH variable?
tgm
+2  A: 

IntelliJ allows you to specify which version of Grails to apply as a per-project facet configuration. The Eclipse plugin has yet to achieve this level of abstraction.

Bill James
The new Eclipse plugin does in fact allow you to set which grails version to use on a per-project basis. Or at least the new springsource version of the plugin does.
Blacktiger
Can you cite a source? I've heard they were working on allowing it, but that configuring GROOVY version had to come first.
Bill James
A: 

Check out this link, it explains exactly how to do that using cygwin and mapping several aliases.

Also, learn how the plugins directory work and replicate it several times for each version of Grails. I also use global plugins for the ones I use often, like tomcat, hibernate, dbUtil, console, etc.

Say you want to switch between 1.1 and 1.2M4 - you could have those directories setup with the plugins you are using:

c:\Users\username\.grails\1.2-M4\projects\projectname\plugins

c:\Users\username\.grails\1.1.1\projects\projectname\plugins

Then, take applications.groovy and make several copies, like

application.groovy.1.1
application.groovy.1.2M4

Now, to switch, you just need to rename the application.groovy.X to application.groovy and you are good to go (after running grails clean of course):

grails1.1 run-app 
grails12M4 run-app

Lastly, there are other differences between versions (i.e. new 1.2 is introducing dependencies DSL), but most of the time things are backwards compatible enough that you can come up with a common denominator.

Jean Barmash
+1  A: 

Hi,

I have the same issue as you. For my concern, I have written a batch script (grails_version.bat) accessible from my Windows PATH home.

Set up your GRAILS_HOME to your standard Grails version and each time you want to run a Grails app into another version than the standard one, open a command prompt, run the batch script (>grails_version) and run your grails commands (ex: grails run-app).

If your are using IntelliJ, you can configure the grails version per application.

Here is the code:

@echo off

set v11=1.1
set v111=1.1.1
set v12M2=1.2-M2
set v12M3=1.2-M3
set v12M4=1.2-M4
set /p grails_version= What is the grails version (%v11%, %v111%, %v12M2%, %v12M3% (default), %v12M4%)?
if "%grails_version%" == "%v11%" goto :set_grails_home 
if "%grails_version%" == "%v111%" goto :set_grails_home 
if "%grails_version%" == "%v12M2%" goto :set_grails_home 
if "%grails_version%" == "%v12M3%" goto :set_grails_home 
if "%grails_version%" == "%v12M4%" goto :set_grails_home 
if "%grails_version%" == "" goto :set_grails_home_default 

:no_valid_input
echo The input version is not valid
exit

:set_grails_home_default
set grails_version=%v12M3%

:set_grails_home
set GRAILS_HOME=D:\Install\grails\grails-%grails_version%
path = %GRAILS_HOME%\bin;%PATH%
echo GRAILS_HOME=%GRAILS_HOME%

Enjoy.

fabien7474
A: 

Voted up Kico Lobo. Batch files are the easiest and simplest way for me. Also considering the fact that i use a simple text editor for development and no IDE, batch files just keep it simple.

aldrin