WAR 名称基于 BuildConfig.groovy 中的环境
WAR name based on Environment in BuildConfig.groovy
我想根据 appName
、appVersion
和 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 命令行。首先,我认为一切都按预期进行。我平时的部署流程如下:
- 运行
grails clean
- 运行
war
所需环境的命令
- 在应用程序服务器上部署WAR
然而,在 clean 之后,也可能在其他 grails 命令之后,Environment.current
的值以我不理解的方式发生变化。我总是 dev
第一次 运行 war
命令。第一次之后,环境名称再次被正确检索。所以我做的解决方法是:
- 运行
grails clean
- 运行
war
所需环境的命令,但启动后立即中断
- 运行
war
所需环境的命令
- 在应用程序服务器上部署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.
中解决了这个具体问题
我想根据 appName
、appVersion
和 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 命令行。首先,我认为一切都按预期进行。我平时的部署流程如下:
- 运行
grails clean
- 运行
war
所需环境的命令 - 在应用程序服务器上部署WAR
然而,在 clean 之后,也可能在其他 grails 命令之后,Environment.current
的值以我不理解的方式发生变化。我总是 dev
第一次 运行 war
命令。第一次之后,环境名称再次被正确检索。所以我做的解决方法是:
- 运行
grails clean
- 运行
war
所需环境的命令,但启动后立即中断 - 运行
war
所需环境的命令 - 在应用程序服务器上部署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.
中解决了这个具体问题