如何在创建战争时更改 Gradle 中 .properties 的内容

Posted

技术标签:

【中文标题】如何在创建战争时更改 Gradle 中 .properties 的内容【英文标题】:How to change contents of .properties in Gradle upon war creation 【发布时间】:2016-11-18 03:01:56 【问题描述】:

我正在试验 Gradle 的战争插件。此时项目仍在使用 Ant。它是一个标准的 webapp 布局:

| - project
| ---- src/main/java
| ---- src/main/resource
| ---- src/main/webapp
| ---- src/main/webapp/WEB-INF/classes

src/main/webapp/WEB-INF/classes 中有一个包含密钥jawr.debug.on 的属性文件。出于开发目的,它通常设置为true。在发布阶段,使用 Ant 的 propertyfile 任务将此属性更改为 false

我无法在 Gradle 中找到类似的执行方式。我确实在下面找到了 sn-p,但它并没有在结果战争中改变所说的文件:

ant.propertyfile(
    file: "jawr.properties") 
    entry( key: "jawr.debug.on", value: "false")

实现这一目标的正确方法是什么?

【问题讨论】:

【参考方案1】:

一种方法是在创建战争期间对其进行过滤

war    
        rootSpec.eachFile 
            if (it.name == 'UserMessages.properties') 
                filter  line ->
                    line.replace('@build.label@', "$buildLabel-$stage")
                
            
        
    

【讨论】:

那行得通。但是,这会产生一个问题,即不精确的字符串可能会导致替换未被处理。由于某种原因,将filter 替换为ant.propertyfile(file: it) 时会产生错误。有没有办法利用适当的属性替换而不是钝字符串替换? 据我所知,没有像您的用例这样的本地支持。过滤文件的选项相当有限。另见docs.gradle.org/current/userguide/…

以上是关于如何在创建战争时更改 Gradle 中 .properties 的内容的主要内容,如果未能解决你的问题,请参考以下文章

Gradle'war'插件如何更改档案的名称

spring-boot 战争在启动时失败

Gradle 战争命令不包括休眠 cfg 文件

我可以从 gradle 任务中保存 Eclipse 文件吗?

在运行时更改gradle依赖中的代码

如何在 WildFly 10 中将爆炸战争部署为文件夹