gradle - 使用Gradle将环境属性复制到WAR中并动态更新版本属性

标签 gradle war

我有一个gradle构建,它可以创建多个war文件,每个文件用于config目录中定义的每个环境。例如,以下目录结构将产生3次war:

cfg
- dev
   - application.properties
   - log4j.properties
- staging
   - application.properties
   - log4j.properties
- production
   - application.properties
   - log4j.properties

该应用程序的版本位于gradle文件中,也位于application.properties键下的app.version文件中。我只想在build.gradle中维护版本,并在构建时将值复制到application.properties文件中。

下面是我创建和执行构建的gradle脚本片段。我尝试了几种方法,包括ant.replace任务来复制版本(包含在脚本中),但是我似乎找不到对application.properties文件的正确文件引用来使其正常工作。我也很高兴接受任何其他建立 war 的方法。
// 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") })

完整的here演示,也可以看看docs

关于gradle - 使用Gradle将环境属性复制到WAR中并动态更新版本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246356/

相关文章:

eclipse - 无法从新的 tomcat 安装运行 war 文件

maven - 动态加载 `maven` 的本地 `buildscript` 存储库路径

unit-testing - Kotest 打破 gradle 的 :test task with java. lang.IllegalArgumentException: Received a failure event for test with unknown id

deployment - 无法在 WebLogic 上的 EAR 中部署 WAR

java - 使用 Gradle 将 WAR 文件发布到 Maven Repo

apache - 当我在 Tomcat 中有一个 WAR 并且它被部署时,如果我重新启动 tomcat 那个 WAR 将被重新部署?

gradle - 在Gradle中,我怎么知道哪个任务是由哪个插件创建的?

java - JHipster 格式的 Gradle 依赖项 "groupId:artifact"

android - MaterialContainerTransform Unresolved reference

javascript - 从仅包含 HTML、CSS 和 JavaScript 的 Web 应用生成 .war 文件