防止Gradle Zip任务在执行任务之前下载依赖项

防止Gradle Zip任务在执行任务之前下载依赖项,gradle,Gradle,我有一个简单的gradle任务,可以打开maven jar(例如)。如何使该任务在执行之前不下载jar apply plugin:'base' repositories { mavenCentral() } configurations.create 'myDep' dependencies { myDep 'commons-io:commons-io:1.0' } task zip(type:Zip) { from { configurations.myDep.collect {

我有一个简单的gradle任务,可以打开maven jar(例如)。如何使该任务在执行之前不下载jar

apply plugin:'base'
repositories { mavenCentral() }

configurations.create 'myDep'
dependencies {
   myDep 'commons-io:commons-io:1.0'
}
task zip(type:Zip) {
   from { configurations.myDep.collect { zipTree(it) } }
}
如果我运行“gradle任务”,它将意外下载jar:

$ gradle tasks
Download http://repo1.maven.org/maven2/commons-io/commons-io/1.0/commons-io-1.0.pom
Download http://repo1.maven.org/maven2/commons-io/commons-io/1.0/commons-io-1.0.jar
:tasks

我认为,
gradletasks
是一个特例,因为它需要评估所有任务的输入,以确定(并显示)它们的任务依赖性。一般来说,只有在Gradle决定执行
zip
任务后,才会对
zip任务的输入进行评估(从而下载Jar)。这将发生在构建任务执行图的过程中(再次确定任务依赖关系),即在执行任何任务之前(但仅当Gradle决定执行
zip


如果在
gradle任务
的情况下必须阻止下载Jar,则可以将
的配置从
推迟到
zip.doFirst{}
,但这不是一个通用的解决方案,可能会导致其他问题(最新检查无法正常工作,任务依赖关系无法自动推断)。

,我现在明白了。这是不幸的,因为“gradletasks”可能是大多数用户运行的第一个命令。我有一些大于200MB的依赖项。我认为gradle不必下载依赖项来打印任务列表。通常情况下不需要下载,但在这种特殊情况下确实需要下载,并且仅适用于
myDep
上的依赖项。也许
zipTree
可以接受
Iterable
。这样您就不必使用
collect
,配置也就无法在该阶段得到解决,问题也就消失了。