如何在gradle构建中从类中访问项目属性?

时间:2017-03-22 09:01:40

标签: java gradle groovy

我在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

}

1 个答案:

答案 0 :(得分:1)

您需要扩展BaseParamFilterReader,然后使用setParameters(final Parameter[] parameters)方法获取参数。

Copy任务有filter重载,它带有参数,例如:

filter(ReplaceTokens, tokens: [version: '2.3.1'])

您可能会写一些类似

的内容

filter(MyFilter, profile: profile)

调查ReplaceTokens可能会有所帮助