WAR 名称基于 BuildConfig.groovy 中的环境

WAR name based on Environment in BuildConfig.groovy

我想根据 appNameappVersionEnvironment.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

然而,在 clean 之后,也可能在其他 grails 命令之后,Environment.current 的值以我不理解的方式发生变化。我总是 dev 第一次 运行 war 命令。第一次之后,环境名称再次被正确检索。所以我做的解决方法是:

  1. 运行 grails clean
  2. 运行 war 所需环境的命令,但启动后立即中断
  3. 运行 war 所需环境的命令
  4. 在应用程序服务器上部署WAR

我做错了什么还是这是一个错误?

重现环境:

GGTS 3.6.4 发布

Grails 2.4.2

Groovy 2.3.10

JDK1.6.0_07

编辑: 我无法从常规命令行使用 Grails 重现。此行为仅发生在 Groovy Grails Tool Suite 的内置命令行中。环境似乎在随机切换。

编辑 2: OS:Windows 7

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

修改 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]

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

但是,当从 Windows CMD 执行时,编码对我来说中断了。我已经在 another question.

中解决了这个具体问题