Gradle中的资源过滤是否可以不使用令牌?

Gradle中的资源过滤是否可以不使用令牌?,gradle,Gradle,在Gradle中执行资源筛选的推荐方法是在属性文件中使用令牌,然后在处理时替换它们 范例 # config.properties hostname = @myhost@ 在build.gradle中执行以下操作 processResources { filter ReplaceTokens, tokens: [ "myhost": project.property('myhost') ] } 这种方法的问题在于,当从eclipse这样的IDE运行时,它将无法工作。我想

在Gradle中执行资源筛选的推荐方法是在属性文件中使用令牌,然后在处理时替换它们

范例

# config.properties
hostname = @myhost@
在build.gradle中执行以下操作

processResources {
   filter ReplaceTokens, tokens: [
      "myhost": project.property('myhost')
   ]
}
这种方法的问题在于,当从eclipse这样的IDE运行时,它将无法工作。我想属性文件是免费的Gradle特定的令牌,即刚刚有

hostname = localhost

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

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

或者您可以有一个默认文件,在IDE开发期间使用,并有另一个包含标记的文件,在使用gradle构建时替换开发文件。类似这样的东西(未测试)


spring引导方法

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

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

config.properties文件中

var1=${var1}
var2=${var2}
processResources {
    filesMatching('**config.properties') {
        expand(
            'var1': project.property('var1'),
            'var2': project.property('var2'),
        )
    }
}
gradle.properties文件中

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

expand使用Groovy的SimpleTemplateEngine,如果文件中有不需要的$s,它将失败。@xing yup,但这不是什么大问题。因为在这种情况下,可能会有一些错误,对吗?这是maven方法。For gradle使用${}。在gradle 6.2.2中,我一直得到
org.codehaus.groovy.runtime.GStringImpl在使用
project.property('version')
时无法转换为java.lang.String
。我不得不将您的示例更改为
filter(org.apache.tools.ant.filters.ReplaceTokens,tokens:['version':project.property('version').toString()])