使用 Gradle 将环境属性复制到 WAR 并动态更新版本 属性
Copy environment properties into WAR with Gradle and dynamically update a version property
我有一个 gradle 构建,它创建多个 war 文件,每个文件对应配置目录中定义的每个环境。例如,如下目录结构将产生 3 wars:
cfg
- dev
- application.properties
- log4j.properties
- staging
- application.properties
- log4j.properties
- production
- application.properties
- log4j.properties
该应用程序的版本在 gradle 文件中,也在密钥 app.version
下的 application.properties
文件中。我只想在 build.gradle
中维护版本,并在构建时将值复制到 application.properties 文件中。
创建和执行构建的 gradle 脚本片段如下。我已经尝试了一些方法,包括 ant.replace
任务来复制版本(包含在脚本中),但我似乎无法找到对 application.properties 文件的正确文件引用来获取它工作。我也很乐意接受任何其他构建 wars 的方法。
// generate package* tasks for all defined configurations
files { file('cfg').listFiles() }.each {
File file -> if (file.name != 'common' && file.name != '.svn') {
tasks.create(name: "package$file.name", type: War, dependsOn: classes) {
classifier = file.name
from("./cfg/$file.name") {
into("WEB-INF/classes")
include "**/*"
}
ant.replace(file:"WEB-INF/classes/application.properties", token:"@appVersion", value:project.version)
}
}
}
// run all assemble tasks
task dist (dependsOn: tasks.matching { Task task -> task.name.startsWith("package") })
可以简化一点:
apply plugin: 'war'
import org.apache.tools.ant.filters.ReplaceTokens
project.file('cfg').listFiles().each { File file ->
if (file.name != 'common' && file.name != '.svn') {
tasks.create(name: "package$file.name", type: War, dependsOn: classes) {
classifier = file.name
from(file) {
into('WEB-INF/classes')
include "**/*"
filter(ReplaceTokens, tokens: ['app.version': '2.3.1'])
}
}
}
}
task dist (dependsOn: tasks.matching { Task task -> task.name.startsWith("package") })
我有一个 gradle 构建,它创建多个 war 文件,每个文件对应配置目录中定义的每个环境。例如,如下目录结构将产生 3 wars:
cfg
- dev
- application.properties
- log4j.properties
- staging
- application.properties
- log4j.properties
- production
- application.properties
- log4j.properties
该应用程序的版本在 gradle 文件中,也在密钥 app.version
下的 application.properties
文件中。我只想在 build.gradle
中维护版本,并在构建时将值复制到 application.properties 文件中。
创建和执行构建的 gradle 脚本片段如下。我已经尝试了一些方法,包括 ant.replace
任务来复制版本(包含在脚本中),但我似乎无法找到对 application.properties 文件的正确文件引用来获取它工作。我也很乐意接受任何其他构建 wars 的方法。
// generate package* tasks for all defined configurations
files { file('cfg').listFiles() }.each {
File file -> if (file.name != 'common' && file.name != '.svn') {
tasks.create(name: "package$file.name", type: War, dependsOn: classes) {
classifier = file.name
from("./cfg/$file.name") {
into("WEB-INF/classes")
include "**/*"
}
ant.replace(file:"WEB-INF/classes/application.properties", token:"@appVersion", value:project.version)
}
}
}
// run all assemble tasks
task dist (dependsOn: tasks.matching { Task task -> task.name.startsWith("package") })
可以简化一点:
apply plugin: 'war'
import org.apache.tools.ant.filters.ReplaceTokens
project.file('cfg').listFiles().each { File file ->
if (file.name != 'common' && file.name != '.svn') {
tasks.create(name: "package$file.name", type: War, dependsOn: classes) {
classifier = file.name
from(file) {
into('WEB-INF/classes')
include "**/*"
filter(ReplaceTokens, tokens: ['app.version': '2.3.1'])
}
}
}
}
task dist (dependsOn: tasks.matching { Task task -> task.name.startsWith("package") })