我在gradle构建文件中有以下内容,我要做的是在复制之前过滤文件的内容,因此我创建了一个自定义过滤器类,每次复制文件时都会调用它。现在我试图从MyFilter
类访问项目属性,例如我尝试打印profile
属性,但到目前为止我找不到这样做的方法,可以这样做吗? / p>
通常我会在使用gradlew build -Pprofile=prd
启动构建文件时传递配置文件,但我真的看不到从MyFilter
类访问这些属性的方法。
apply plugin: 'java'
tasks.build.finalizedBy('copyFiles')
class MyFilter extends FilterReader {
MyFilter(Reader input) {
super(new StringReader(""))
//tried many things to print the profile property, nothing worked.
}
}
def profile = project.properties['profile'] ?: "dev"
def amqa = project.properties['amqa'] ?: "127.0.0.1"
def amqaEG = project.properties['amqaEG'] ?: "127.0.0.1"
task copyFiles(type: Copy) {
project.properties['amqa']
from ('config')
into ('.')
include('**/*_#' + profile + '*')
rename { filename ->
filename.replace '_#' + profile, ''
}
filter MyFilter
}
答案 0 :(得分:1)
您需要扩展BaseParamFilterReader,然后使用setParameters(final Parameter[] parameters)
方法获取参数。
Copy
任务有filter
重载,它带有参数,例如:
filter(ReplaceTokens, tokens: [version: '2.3.1'])
您可能会写一些类似
的内容 filter(MyFilter, profile: profile)
调查ReplaceTokens
可能会有所帮助