是否可以在不使用令牌的情况下在Gradle中进行资源过滤?

时间:2014-08-15 14:20:59

标签: gradle

在Gradle中进行资源过滤的推荐方法是在属性文件中包含令牌,然后在处理时替换它们。

实施例

# config.properties
hostname = @myhost@

并在build.gradle中执行类似下面的操作

processResources {
   filter ReplaceTokens, tokens: [
      "myhost": project.property('myhost')
   ]
}

这种方法的问题在于它从像eclipse这样的IDE运行时不会起作用。我希望属性文件没有Gradle特定的令牌,即只有

hostname = localhost

但在从Gradle构建时可以选择替换它。

3 个答案:

答案 0 :(得分:24)

您可以使用以下内容(未经测试):

processResources {
    filesMatching('**/config.properties') {
        filter {
            it.replace('localhost', project.property('myhost'))
        }
    }
}

或者您可以拥有一个默认文件,在IDE的开发过程中使用,并且有另一个包含标记的文件,并在使用gradle构建时替换开发文件。这样的事情(未经测试)

processResources {
    exclude '**/config.properties'
    filesMatching('**/config-prod.properties') {
        setName 'config.properties'
        filter ReplaceTokens, tokens: [
            "myhost": project.property('myhost')
        ]
    }
}

答案 1 :(得分:4)

如果你愿意,可以使用占位符这样的东西。

config.properties 文件

var1=${var1}
var2=${var2}

gradle.properties 文件

processResources {
    filesMatching('**config.properties') {
        expand(
            'var1': project.property('var1'),
            'var2': project.property('var2'),
        )
    }
}

答案 2 :(得分:1)

弹簧引导方法

project.version=X.X.X.X
info.build.version=@project.version@

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info-automatic-expansion