【问题标题】:How do you manage developing with multiple versions of Grails using Windows?您如何使用 Windows 管理多个版本的 Grails 开发?
【发布时间】:2010-12-19 23:29:24
【问题描述】:

我们使用 Grails 已经有一段时间了,现在已经使用了几个 Grails 版本。我们并不总是希望立即迁移我们的“旧”应用程序,而是经常使用新版本进行新开发。更改 Windows 环境变量很不方便,因为我有时必须同时处理两个运行不同版本 Grails 的相关项目。

在 Linux 中,我可能会创建包装脚本或别名以允许我在命令行上指定版本切换,但我认为 Grails 不支持这一点。

其他需要针对多个 Grails 版本编写代码的人如何管理它?

更新:
我创建了一个 gv.bat 文件来设置 GRAILS\_HOMEPATH 环境变量。我添加了一个GRAILS\_INSTALLS 环境变量(我的盒子上的c:\usr\local\grails)并从我的PATH 中删除了%GRAILS_HOME%\bin 引用。

gv.bat

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

要执行我运行的任何 Grails 工作 > gv 1.1.2 或我需要使用的任何版本。我想弄清楚如何在PATH 中进行字符串替换以更改值,但这对我来说很难

【问题讨论】:

    标签: grails sdkman gvm


    【解决方案1】:

    我有几个 bat 文件,它们会根据我使用的版本更改 GRAILS_HOME 和系统 PATH。

    这根本不是最漂亮的解决方案,但至少对我有用。

    【讨论】:

    • 它们很长吗,您介意发布更新 PATH 变量的那个吗?
    【解决方案2】:

    我有一个批处理文件,如下所示。

    @ECHO OFF
    
    if "%1"=="231" goto grails231
    if "%1"=="232" goto grails232
    if "%1"=="233" goto grails233
    if "%1"=="234" goto grails234
    
    
    goto end
    
    :grails231
    set GRAILS_HOME=F:\softwares\grails-2.3.1
    set PATH=%GRAILS_HOME%\bin;%PATH%
    goto end
    
    :grails232
    set GRAILS_HOME=F:\softwares\grails-2.3.2
    set PATH=%GRAILS_HOME%\bin;%PATH%
    goto end
    
    
    :grails233
    set GRAILS_HOME=F:\softwares\grails-2.3.3
    set PATH=%GRAILS_HOME%\bin;%PATH%
    goto end
    
    :grails234
    set GRAILS_HOME=F:\softwares\grails-2.3.4
    set PATH=%GRAILS_HOME%\bin;%PATH%
    goto end
    
    :end
    

    它可以像'setgrails 233'一样运行,它将设置grails 2.3.3

    【讨论】:

      【解决方案3】:

      IntelliJ 允许您指定应用哪个版本的 Grails 作为每个项目方面的配置。 Eclipse 插件尚未达到这种抽象级别。

      【讨论】:

      • 新的 Eclipse 插件实际上允许您根据每个项目设置要使用的 grails 版本。或者至少插件的新 springsource 版本可以。
      • 你能引用一个来源吗?我听说他们正在努力允许它,但必须先配置 GROOVY 版本。
      【解决方案4】:

      现在已经很晚了,GVM 已经不是以前的工具了。相反,我使用 SDKMAN (https://sdkman.io/),并且在 Windows 中获得了一些类似 linux 的工具,或者使用 Cygwin 等,它可以安装在 Windows 上。

      ------下面的旧答案------

      GVM 是一个供 unix/mac 环境管理 Groovy/Gradle/Grails/更多版本的工具,终于有人制作了一个 Windows 等价物,称为 Posh-gvm(Power-shell GVM 的缩写)。它非常有用且易于使用,可以随时为您想要使用的这些工具的任何版本下载和配置您的环境。

      如果您使用的是 IDE,posh-gvm 仍然是下载/安装新版本的好方法,并且您的 IDE 可以指向 posh-gvm 安装目录。

      【讨论】:

      • 我不再在 Windows 上开发,但这绝对是个好消息。
      • 我不知道如何安装 posh-gvm。网站文档说通过键入“Install-Package posh-gvm”进行安装,但这只是给出“找不到匹配项”
      • 还尝试了“Via short script”方法,当你执行“Import-Module posh-gvm”时,它会给出“SecurityError: (:) [Import-Module], PSSecurityException”,甚至以管理员身份运行.尝试了 32 位和 64 位版本的 powershell,安装这个东西没有运气。
      【解决方案5】:

      我和你有同样的问题。出于我的考虑,我编写了一个可以从我的 Windows PATH 主页访问的批处理脚本 (grails_version.bat)。

      将您的 GRAILS_HOME 设置为您的标准 Grails 版本,每次您想要将 Grails 应用程序运行到标准版本之外的另一个版本时,打开命令提示符,运行批处理脚本 (>grails_version) 并运行您的 grails 命令 (例如:grails run-app)。

      如果您使用的是 IntelliJ,则可以为每个应用程序配置 grails 版本。

      代码如下:

      @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%
      

      享受吧。

      【讨论】:

        【解决方案6】:

        我在 Windows 中如下所示。

        所以我只是更改 GRAILS_VER 环境变量。 我可以随时更改我的 grails 版本。

        【讨论】:

          【解决方案7】:

          在 Linux/Mac 上,GVM 是安装和使用多个版本的 Grails、Groovy 等的绝佳工具。您不能在 Windows 上使用 GVM 本身1,但是有将在 Windows 上的 Powershell 下运行的克隆 posh-gvm

          1. AFAIK 这是因为 Windows 不支持符号链接

          【讨论】:

            【解决方案8】:

            关于这些答案,我要改变的是 PATH 处理。每次运行脚本并更改版本时,都会将路径再扩展一个节点。它有效,但很混乱。尝试创建一个不引用 JAVA_HOME 或 GRAILS_HOME 的 $path2,路径变为 path2+grails+java。示例:设置 PATH="%PATH2%;F:\softwares\grails-2.3.1;path2java7.

            我添加 Java7 引用的唯一原因是我的旧 grails 应用程序需要 Java 6,而新 grails 应用程序需要 Java 7。

            【讨论】:

              【解决方案9】:

              查看this link,它准确地解释了如何使用 cygwin 和映射多个别名来做到这一点。

              此外,了解 plugins 目录的工作原理,并为每个 Grails 版本多次复制它。对于我经常使用的插件,我也会使用全局插件,比如tomcat、hibernate、dbUtil、console等。

              假设您想在 1.1 和 1.2M4 之间切换 - 您可以使用您正在使用的插件设置这些目录:

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

              然后,获取 applications.groovy 并制作几个副本,例如

              application.groovy.1.1
              application.groovy.1.2M4
              

              现在,要切换,只需将 application.groovy.X 重命名为 application.groovy 即可(当然是在运行 grails clean 之后):

              grails1.1 run-app 
              grails12M4 run-app
              

              最后,版本之间还有其他差异(即新的 1.2 引入了依赖项 DSL),但大多数情况下,事情是向后兼容的,您可以找到一个共同点。

              【讨论】:

                【解决方案10】:

                有些答案已经过时了。

                现在看来最好的选择是SDKMAN!

                SDKMAN!在 Mac OSX、Linux、WLS、Cygwin、Solaris 和 FreeBSD 上顺利安装。我们还支持 Bash 和 ZSH shell。

                也可以在 Windows 上安装,但 SDKMAN“不能原生在 Windows 上安装,需要 WLS、Cygwin 或 MSYS+MinGW”。

                之后,您可以choose the Grails SDK 以及您想要的版本。例如:

                sdk install grails 1.3.7
                

                【讨论】: