gradle - 排除方法在gradle中不起作用

标签 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')
}

最佳答案

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

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

然后是配置阶段,在此阶段配置任务,并设置诸如排除之类的内容。

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

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

如果要有条件地排除某些内容,请不要通过任务执行此操作(如果没有任务依赖项,也不能保证在尝试操作的任务之前运行该任务),而是要通过一些项目属性来进行设置从命令行使用-P excludeShit=true

然后在之外的构建文件中添加类似以下内容的任何任务

if (hasProperty('excludeShit') && excludeShit.toBoolean()) {
    project.tasks.withType(AbstractCopyTask) {
        it.exclude f
    }
}

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

关于gradle - 排除方法在gradle中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691233/

相关文章:

gradle - 如果文件被Gradle守护程序锁定,如何处理情况

gradle - 从另一个子项目复制 Gradle 依赖项而不发出弃用警告

gradle - Gradle复制任务扩展了执行时派生的属性

android - sonarqube gradle插件异常在使用android productFlavors时

java - Gradle 未编译 lib 文件夹中的依赖项 jar

Android - 错误 :A prblem occurred configuring project ':app'

react-native - 安装 react-redux 后,native_modules.gradle 文件将被删除

java - TeamCity-删除自动添加的命令行参数?

java - 如何为所有模块、java、android 应用程序和 android 库配置 sourceCompatibility 和 compilerArgs?

Android 运行时错误与发布版本但不是调试版本