2016-02-14 1 views
1

В Gradle руководстве пользователя Chapter 23. Dependency Management, пример показывает разницу между Configuration.copy и Configuration.files методом:В чем разница между методами configuration.files и configuration.copy в Gradle?

build.gradle 

task copyVsFiles << { 
    configurations.sealife.copyRecursive { dep -> dep.name == 'orca' } 
     .each { file -> println file.name } 
    println() 
    configurations.sealife.files { dep -> dep.name == 'orca' } 
     .each { file -> println file.name } 
} 

Output of gradle -q copyVsFiles 
> gradle -q copyVsFiles 
orca-1.0.jar 
seal-1.0.jar 

orca-1.0.jar 
seal-2.0.jar 

ниже объяснение смутило меня. Я все еще не знаю разницы. Кто-нибудь может мне с этим помочь ?

+1

Существует пояснение прямо под фрагментом кода. Можете ли вы уточнить, какая часть вас смущает? (В противном случае вы просто просите кого-то произвольно перефразировать его для вас!) –

+0

@OliverCharlesworth - это вопрос ELI5 против SO thisos? – RaGe

+0

@RaGe - да, ИМХО, учитывая, что ОП не указал, что на самом деле запутывает, нет никакого способа ответить на это окончательно. –

ответ

0

Ответ на ваш вопрос приведен в параграфе сразу после примера 23.24 в документации по API Gradle Chapter 23 Section 24.

Обратите внимание, как метод configurations.files возвращает версию 2 уплотняющей банки.

В приведенном выше примере, косатка имеет зависимость от уплотнения-1,0, тогда как акула имеет зависимость onseal-2.0. Поэтому исходная конфигурация имеет конфликт версий, который разрешен для более новой версии seal-2.0. Метод файлов поэтому возвращает уплотнение-2.0 в качестве транзитивной зависимости orca. Скопированная конфигурация имеет только orca в качестве зависимости и , поэтому конфликт версий отсутствует, а печать-1.0 возвращается как транзитивная зависимость .

Чтобы понять, почему это происходит, потратите некоторое время на метод конфигурации в Gradle docs.

файлы выполняют следующие действия:

Решает эту конфигурацию. Это находит и загружает файлы , которые составляют эту конфигурацию. Но возвращается только результирующий набор файлов , принадлежащий подмножеству зависимостей, указанному в параметре dependencySpec .

Copy делает следующее:

Создает копию этой конфигурации, который содержит только зависимостей непосредственно в этой конфигурации (без взносов от superconfigurations). Новая конфигурация будет находиться в состоянии UNRESOLVED, но сохранит все остальные атрибуты этой конфигурации , за исключением суперконфигурации. Configuration.getHierarchy() для копии не будет содержать никаких суперконфигураций.

Как это применимо к примеру документации? Configuration.files разрешает конфигурацию, которая, как показано в примере в примере, обрабатывает конфликт версии, введенный shark, который зависит от seal-2.0.jar. Configuration.copy создает копию конфигурации и еще не разрешен, что означает, что у нее еще нет конфликта версий.

+0

OP четко заявляет, что они видели это объяснение и не понимают его. Не обижайтесь, но ваш ответ не делает ничего лучше, чтобы улучшить ситуацию. – RaGe