2014-04-04 71 views
0

我有一个简单的gradle任务,它可以压缩maven jar(例如)。在任务执行之前,你如何获得这个任务不能下载jar?防止Gradle Zip任务在任务执行前下载依赖关系

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 

回答

1

我认为gradle tasks是一个特例,因为它需要的所有任务输入评估为确定(并显示)他们的任务依赖关系。通常,一旦Gradle决定执行zip任务,zip任务的输入将仅被评估(因此将下载Jar)。这将在构建任务执行图期间发生(也是为了确定任务依赖关系),即之前执行任何任务(但只有如果 Gradle已决定执行zip)。

如果你绝对必须避免在gradle tasks情况下的jar下载,你可以推迟配置from直到zip.doFirst {},但这并不是一个通用的解决方案,并可能导致其他问题(最多最新的检查工作不正常,不自动推断任务依赖性)。

+0

好吧,我现在明白了。这很不幸,因为“gradle tasks”可能是大多数用户运行的第一个命令。我有一些> 200MB的依赖关系。我不认为gradle应该下载依赖来打印任务列表。 – cmcginty

+0

它通常不会,但它在这种特殊情况下,并且仅用于“myDep”的依赖关系。也许'zipTree'可以接受'Iterable '。那么你不必使用'collect',这个阶段的配置就不会得到解决,问题就会消失。 –

相关问题