基于BuildConfig.groovy

时间:2015-11-20 18:22:13

标签: grails deployment ggts grails-2.4

我想根据appNameappVersion和短名称Environment.current自动命名我的WAR文件。我在BuildConfig.groovy中设置了以下选项:

String currentEnvShortName = Environment.envNameMappings.find{it.value == Environment.current.name}.key

def f = new File("grails-app/conf/config.properties")
f.text = ""
f << "Current Env: ${currentEnvShortName}"

grails.project.war.file = "target/war/${appName}-${appVersion.toString().replaceAll(/\./,' ').split().join("-")}${currentEnvShortName}.war"

我将环境写入文件,以便我不必等待war命令执行。 编辑:使用GGTS命令行。首先,我认为一切都按预期工作。我通常的部署过程如下:

  1. 运行grails clean
  2. 针对所需环境运行war命令
  3. 在应用程序服务器上部署WAR
  4. 然而,在干净之后,也可能在其他grails命令之后,Environment.current的值以我不理解的方式改变。第一次运行dev命令时始终为war。在第一次之后,再次正确检索环境名称。所以我做的解决方法是:

    1. 运行grails clean
    2. 为所需环境运行war命令,但在启动后立即中断
    3. 针对所需环境运行war命令
    4. 在应用程序服务器上部署WAR
    5. 我做错了什么或这是一个错误?

      重现环境:

      GGTS 3.6.4 RELEASE

      Grails 2.4.2

      Groovy 2.3.10

      JDK 1.6.0_07

      编辑:我无法从常规命令行使用Grails重现。只有在Groovy Grails Tool Suite内置命令行时才会出现此问题。环境似乎随机切换。

      编辑2:操作系统:Windows 7

2 个答案:

答案 0 :(得分:1)

好吧,我多次尝试你的场景,但无法重现。但是,如果由于某种原因它不适合你,你可以使用另一种方法如下:

修改BuildConfig.groovy中的代码,如:

// Define a custom mapping so that you can easily extend for custom environments (which will not be possible via "Environment.current.envNameMappings"
Map envNameMappings = [test: "test", development: "dev", production: "prod"]

// Read the currrent environment from System property
String currentEnv = System.getProperty("grails.env")

println currentEnv
// And this is the short name of environment you want
println envNameMappings[currentEnv]

答案 1 :(得分:0)

仅在Windows上使用Groovy Grails Tool Suite的内置命令行时才会出现此问题。如果从Windows CMD执行war命令,则正确使用环境。

但是,从Windows CMD执行时,编码会中断。我已在another question中解决了这个具体问题。