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

Gradle升级至7.4.2遇配置容器未知属性'compile'错误求助

Gradle 7.4.2升级后configurations.compile报错的解决方法

问题背景

升级Gradle至7.4.2后,构建时触发错误:

评估根项目'service'时出现问题:无法获取类型为org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer的配置容器的未知属性'compile'。

错误来自war任务的Manifest配置段,原代码如下:

war{
    archiveName 'xyz-svc-clt.war'
    
    manifest{
        attributes "Weblogic-Application-Version":  getBuildVersion(),
                   "Built-By": "${env.USERNAME}",
                   "Built-On": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), 
                   "Class-Path": configurations.compile.collect { it.getName() }.join(' ')
    }
    
    if (isDev() == false){
        rootSpec.exclude("**/*_log4j.xml")
        rootSpec.exclude("**/*.properties")
    }   
    
    from('src/main/resources/'){
        include 'handler-chain.xml'
        into 'WEB-INF/classes/com/abc/xyz/service/xyzService/'      
    }
    
    from('src/main/resources/'){
        include 'handler-chain.xml'
        into 'WEB-INF/classes/com/abc/xyz/service/xyzService/notification/'
    }   
}

尝试将configurations.compile替换为configurations.implementation,并添加project.configurations.implementation.setCanBeResolved(true)后问题仍未解决,当前项目使用插件:

apply plugin: 'java'
apply plugin: 'war'

原因分析

Gradle从5.x版本开始废弃了compile、testCompile等旧依赖配置,替换为implementation、testImplementation等新配置。但implementation属于不可解析配置,仅用于声明依赖关系,不能直接用来解析、获取依赖文件。强制设置setCanBeResolved(true)会破坏Gradle的依赖隔离设计,无法正常生效。

解决方案

创建一个可解析的自定义配置,让它继承implementation(及runtimeOnly,如果需要)的依赖,再在Manifest中使用该自定义配置收集依赖文件名。

步骤1:定义自定义可解析配置

在项目根build.gradle中添加:

configurations {
    // 自定义可解析配置,继承implementation的依赖
    compileClasspathResolvable.extendsFrom implementation
    // 如果需要包含运行时依赖,可添加runtimeOnly
    // compileClasspathResolvable.extendsFrom implementation, runtimeOnly
}

步骤2:修改war任务的Manifest配置

将原代码中的configurations.compile替换为自定义配置:

war{
    archiveName 'xyz-svc-clt.war'
    
    manifest{
        attributes "Weblogic-Application-Version":  getBuildVersion(),
                   "Built-By": "${env.USERNAME}",
                   "Built-On": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), 
                   // 使用自定义可解析配置获取依赖文件名
                   "Class-Path": configurations.compileClasspathResolvable.collect { it.getName() }.join(' ')
    }
    
    // 其他原有配置保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37