Gradle中的configuration.files和configuration.copy方法有什么区别?

Gradle中的configuration.files和configuration.copy方法有什么区别?,gradle,dependency-management,Gradle,Dependency Management,在Gradle用户指南中,有一个示例显示Configuration.copy和Configuration.files方法之间的区别: build.gradle task copyVsFiles << { configurations.sealife.copyRecursive { dep -> dep.name == 'orca' } .each { file -> println file.name } println() co

在Gradle用户指南中,有一个示例显示Configuration.copy和Configuration.files方法之间的区别:

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
build.gradle
任务copyVsFiles dep.name=='orca'}
.each{file->println file.name}
println()
configurations.sealife.files{dep->dep.name=='orca'}
.each{file->println file.name}
}
gradle-q copyVS文件的输出
>gradle-qcopyvsfiles
奥卡-1.0.jar
seal-1.0.jar
奥卡-1.0.jar
seal-2.0.jar

下面的解释把我弄糊涂了。我还是不知道有什么区别。有人能帮我吗?

您的问题的答案在Gradle API文档示例23.24后面的段落中

注意configurations.files方法如何返回密封罐的版本2

在上面的例子中,orca依赖seal-1.0,而shark 依赖于SEAL-2.0。因此,原始配置已被修改 版本冲突已解决为较新的seal-2.0版本。 因此,files方法将seal-2.0作为可传递依赖项返回 虎鲸的。复制的配置只有orca作为依赖项,并且 因此不存在版本冲突,seal-1.0作为 传递依赖

要真正理解为什么会发生这种情况,请花一些时间查看中的配置方法

文件执行以下操作:

解析此配置。这将定位并下载文件 这构成了这个配置。但只有结果文件集 属于由指定的依赖项的子集 将返回dependencySpec

复制会执行以下操作:

创建此配置的副本,该副本仅包含 直接在此配置中的依赖项(无贡献 来自超级配置)。新配置将在 未解析状态,但将保留此状态的所有其他属性 除超级配置之外的配置。Configuration.getHierarchy() 因为副本将不包括任何超级配置


这如何应用于文档示例
Configuration.files
解析配置,如示例中的输出所示,该配置处理由依赖于
seal-2.0.jar的
shark
引入的版本冲突<代码>配置。复制
创建配置的副本,但尚未解决,这意味着它没有版本冲突。

您的问题的答案在Gradle API文档示例23.24后面的段落中

注意configurations.files方法如何返回密封罐的版本2

在上面的例子中,orca依赖seal-1.0,而shark 依赖于SEAL-2.0。因此,原始配置已被修改 版本冲突已解决为较新的seal-2.0版本。 因此,files方法将seal-2.0作为可传递依赖项返回 虎鲸的。复制的配置只有orca作为依赖项,并且 因此不存在版本冲突,seal-1.0作为 传递依赖

要真正理解为什么会发生这种情况,请花一些时间查看中的配置方法

文件执行以下操作:

解析此配置。这将定位并下载文件 这构成了这个配置。但只有结果文件集 属于由指定的依赖项的子集 将返回dependencySpec

复制会执行以下操作:

创建此配置的副本,该副本仅包含 直接在此配置中的依赖项(无贡献 来自超级配置)。新配置将在 未解析状态,但将保留此状态的所有其他属性 除超级配置之外的配置。Configuration.getHierarchy() 因为副本将不包括任何超级配置


这如何应用于文档示例
Configuration.files
解析配置,如示例中的输出所示,该配置处理由依赖于
seal-2.0.jar的
shark
引入的版本冲突<代码>配置。复制
创建配置的副本,但尚未解决,这意味着它还没有版本冲突。

代码片段的正下方有一个解释。你能澄清哪一部分让你困惑吗?(否则你只是在要求别人随意地为你重新措辞!)@OliverCharlesworth是一个ELI5问题,与所谓的风气背道而驰吗?@RaGe-是的,IMHO,鉴于OP没有明确说明什么是真正令人困惑的,因此没有办法最终回答这个问题。@ArronXY,你能更新你的问题,明确地问一下吗,“Gradle中的configuration.files和configuration.copy方法之间有什么区别?”特别强调您希望如何理解每个方法解决依赖关系之间的区别。代码段下面有一个解释。您能澄清哪些部分让您感到困惑吗?(否则你只是在要求别人随意地为你重新措辞!)@OliverCharlesworth是一个ELI5问题,与所谓的风气背道而驰吗?@RaGe-是的,IMHO,鉴于OP没有明确说明什么是真正令人困惑的,因此没有办法最终回答这个问题。@ArronXY,你能更新你的问题以明确提问吗,”Gradle中的configuration.files和configuration.copy方法有什么区别?"特别强调您希望如何理解每种方法解决依赖关系之间的差异。OP明确表示,他们已经看到了此解释,但理解起来有困难。无意冒犯,但您的回答对改善这种情况没有任何帮助。OP明确表示,他们已经看到此解释,并且有困难我明白了。没有冒犯,但你的回答一点也不能改善这一点