排除方法无法在gradle中运行

时间:2016-04-18 10:21:47

标签: gradle build.gradle

我有一项任务,它排除了所有已排除方法的任务中的某些文件,例如Copy,Jar等。

task excluder<<{
    def alltasks = project.getAllTasks(true).get(project)

    for(def t in alltasks){
        try{
            println t.name
            t.exclude([f])
            println f
        }
        catch(MissingMethodException e){}
    }
    println 'excluded files'
}

当我明确提到要在任务中排除的文件时,例如t.exclude(['a','b']),它们会被排除在外。但是如果我在exclude方法中传递一个属性,它们就不会被排除。

在gradle.properties中,我设置f='a','b',当我运行任务测试时,它不排除文件夹'a'和'b'。 它没有给出任何错误,println f方法工作正常,它打印'a','b'

我想知道为什么会这样。

修改的 我在BjörnKautler的回应之后,在我的build.gradle中做了这些修改 。
的build.gradle

ext{
f="['a','b']"
}

project.tasks.withType(AbstractCopyTask) {
println it
println f
it.exclude(f)
}


task copier(type:Copy){
from 'src'
into 'C:/Documents and Settings/manoj.deshpande/Desktop/Destingation/Copy'
}

task jarer(type:Jar, dependsOn:copier){
from 'src'
archiveName = 'namer.jar'
destinationDir file('C:/Documents and Settings/manoj.deshpande/Desktop/Destingation/Jar')
}

1 个答案:

答案 0 :(得分:0)

您的问题是您不考虑Gradle阶段。

有初始化阶段,执行settings.gradle并将多项目构建的项目添加到构建中。

然后是配置阶段,其中配置了任务,并设置了诸如排除等内容。

最后是执行阶段,执行所需的任务。

您尝试在执行阶段更改配置,这非常糟糕,并且不像您观察到的那样无法正常工作。

如果你想有条件地排除东西,不要通过一个任务来做(如果你没有任务依赖性,也不能保证在你尝试操作的任务之前运行),而是通过你的一些项目属性来做也可以使用-P excludeShit=true从命令行进行设置。

然后在您的构建文件外部任何任务

中包含以下内容
if (hasProperty('excludeShit') && excludeShit.toBoolean()) {
    project.tasks.withType(AbstractCopyTask) {
        it.exclude f
    }
}

这会将f排除在Copy,Sync,Jar,Zip,Tar等类型的任务之外。