在Gradle中,我们可以配置Copy
任务应如何处理重复文件。 实际上,我们可以配置实现CopySpec
接口的任何任务如何处理重复文件。 例如,归档任务也实现了此接口。 我们必须使用setDuplicatesStrategy
方法来配置Gradle的行为。 该参数是枚举DuplicatesStrategy
的值。 我们可以使用enum类中的值,也可以使用String
值,这些值会自动转换为enum DuplicatesStrategy
值。
我们可以选择以下策略:
- include :最后一个重复文件“胜出”的默认策略。
- exclude :仅复制第一个找到的重复文件并'wins'。
- warn :在控制台上显示警告,但最后一个重复文件“胜出”,就像包含策略一样。
- 失败 :在找到重复文件的地方构建失败。
以下构建文件创建了Copy
类型的四个任务,每个任务都有不同的重复策略。 在目录src/manual
和src/website
我们有一个文件COPY.txt
。 内容只是文本行,分别COPY from src/manual
COPY from src/website
:
// For each duplicate strategy we create a copy task.
['warn', 'include', 'exclude', 'fail'].each { strategy ->
task "copyDuplicatesStrategy${strategy.capitalize()}"(type: Copy) {
from 'src/manual'
from 'src/webroot'
into "$buildDir/copy"
// Only the value for this property differs for
// each created task.
duplicatesStrategy = strategy
// Print the used duplicates strategy when
// the task starts.
doFirst {
println "Copying with duplicates strategy '${strategy}'."
}
// Print the contents of the copied file COPY.txt.
doLast {
println "Contents of COPY.txt:"
println file("$buildDir/copy/COPY.txt").text
}
}
}
现在,我们可以调用这四个任务,并查看Gradle的反应:
$ gradle copyDuplicatesStrategyWarn
:copyDuplicatesStrategyWarn
Copying with duplicates strategy 'warn'.
Encountered duplicate path "COPY.txt" during copy operation configured with DuplicatesStrategy.WARN
Contents of COPY.txt:
COPY from src/webroot
BUILD SUCCESSFUL
Total time: 3.728 secs
$ gradle copyDuplicatesStrategyInclude
:copyDuplicatesStrategyInclude
Copying with duplicates strategy 'include'.
Contents of COPY.txt:
COPY from src/webroot
BUILD SUCCESSFUL
Total time: 2.744 secs
$ gradle copyDuplicatesStrategyExclude
:copyDuplicatesStrategyExclude
Copying with duplicates strategy 'exclude'.
Contents of COPY.txt:
COPY from src/manual
BUILD SUCCESSFUL
Total time: 2.784 secs
$ gradle copyDuplicatesStrategyFail
:copyDuplicatesStrategyFail
Copying with duplicates strategy 'fail'.
:copyDuplicatesStrategyFail FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':copyDuplicatesStrategyFail'.
> Encountered duplicate path "COPY.txt" during copy operation configured with DuplicatesStrategy.FAIL
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 2.786 secs
与Gradle 2.3一起编写。
翻译自: https://www.javacodegeeks.com/2015/04/gradle-goodness-handle-copying-duplicate-files.html