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

Kri*_*raj 15 gradle

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

# config.properties
hostname = @myhost@
Run Code Online (Sandbox Code Playgroud)

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

processResources {
   filter ReplaceTokens, tokens: [
      "myhost": project.property('myhost')
   ]
}
Run Code Online (Sandbox Code Playgroud)

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

hostname = localhost
Run Code Online (Sandbox Code Playgroud)

但是从Gradle构建时可以选择替换它.

JB *_*zet 24

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

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

或者,您可以拥有一个默认文件,在IDE中进行开发时使用,并使用包含标记的另一个文件,并在使用gradle构建时替换开发文件.像这样的东西(未经测试)

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


Quy*_*ang 5

如果需要,可以使用占位符之类的东西。

config.properties文件中

var1=${var1}
var2=${var2}
Run Code Online (Sandbox Code Playgroud)

gradle.properties文件中

processResources {
    filesMatching('**config.properties') {
        expand(
            'var1': project.property('var1'),
            'var2': project.property('var2'),
        )
    }
}
Run Code Online (Sandbox Code Playgroud)