You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle 7.5.1中DuplicatesStrategy.INHERIT设置无效问题求助

问题

在Gradle 7.5.1项目中,执行以下processResources任务时出现重复文件错误:

processResources {
    with copySpec {
        from "src/main/resources/"
    }
}

资源文件夹下包含application.properties、application-dev.properties、application-test.properties文件,错误提示如下:

Entry application-dev.properties is a duplicate but no duplicate handling strategy has been set.

尝试添加全局配置解决问题,使用DuplicatesStrategy.INCLUDE时项目可正常运行:

allprojects {
    tasks.withType(Copy).all {
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
    }
}

但将INCLUDE替换为INHERIT后,错误再次出现。查看DuplicatesStrategy枚举确认INHERIT是有效值:

package org.gradle.api.file;

public enum DuplicatesStrategy {
    INCLUDE,
    EXCLUDE,
    WARN,
    FAIL,
    INHERIT;

    private DuplicatesStrategy() {
    }
}

请问如何正确配置DuplicatesStrategy.INHERIT策略?

解答

INHERIT策略的核心是继承父级CopySpec的重复文件处理规则,而非直接定义具体处理逻辑。如果父级未设置明确策略,INHERIT会回退到Gradle默认的FAIL行为,这就是替换后错误重现的原因。正确使用方式分两种场景:

1. 全局设置基础策略,任务级继承

先为所有Copy类型任务设置一个基础处理策略,再让特定任务通过INHERIT继承该规则:

allprojects {
    tasks.withType(Copy).configureEach {
        // 全局设置默认策略为INCLUDE
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
    }
}

processResources {
    // 继承全局的INCLUDE策略
    duplicatesStrategy = DuplicatesStrategy.INHERIT
    with copySpec {
        from "src/main/resources/"
    }
}

2. 嵌套CopySpec继承外层任务策略

在嵌套的copySpec中使用INHERIT,会直接继承外层processResources任务的策略:

processResources {
    // 给当前任务设置基础策略
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    with copySpec {
        // 继承外层任务的INCLUDE策略
        duplicatesStrategy = DuplicatesStrategy.INHERIT
        from "src/main/resources/"
    }
}

注意

直接全局设置duplicatesStrategy = DuplicatesStrategy.INHERIT会失效,因为所有Copy任务没有父级CopySpec提供策略,最终会回退到默认的FAIL规则,触发重复文件错误。

内容的提问来源于stack exchange,提问作者mahfuj asif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:35:23