我有一项任务,它排除了所有已排除方法的任务中的某些文件,例如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')
}
答案 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等类型的任务之外。