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

如何解决Gradle构建报错Could not get unknown property 'shadow'

报错产生原因
  • 插件与Gradle版本不兼容:com.github.johnrengelman.shadow 4.0.4版本发布时间较早,最高仅支持Gradle 5.x系列版本,和当前使用的Gradle 7.4.2版本完全不兼容。高版本Gradle下加载该版本插件时无法正常完成初始化,不会为Project对象注入shadow扩展属性,后续调用相关属性时就会抛出未知属性错误。
  • 插件应用范围错误:在根项目的plugins块中声明shadow插件时,默认插件仅会生效在根项目上,不会自动应用到子项目。但后续配置逻辑是直接调用子项目的shadow属性,未应用shadow插件的子项目对象上不存在该属性,同样会触发报错。
  • 配置结构存在语法问题:贴出的代码中,判断子项目的逻辑没有放在subprojects {}遍历闭包内,subproject变量本身未被定义,且代码末尾多了一个多余的闭合大括号,也会干扰构建脚本的正常解析。
可行解决方案

按以下步骤调整配置即可修复问题:

  1. 升级shadow插件到兼容版本
    将插件版本替换为适配Gradle 7.x的7.x系列版本,根项目声明插件时增加apply false,避免根项目不必要加载插件:
plugins {
    id 'com.github.johnrengelman.shadow' version '7.1.2' apply false
    // 其余根项目需要的插件按原有逻辑保留
}
  1. 修正子项目配置结构
    将子项目相关的发布、shadow配置统一放到subprojects {}闭包内,给需要构建fat jar的子项目正确应用shadow插件,修正后参考配置如下:
subprojects {
    // 先应用子项目所需的基础插件
    apply plugin: 'java'
    apply plugin: 'maven-publish'
    apply plugin: 'com.github.johnrengelman.shadow'

    // 再配置发布逻辑
    if (name in gradle.platforms) {
        publishing {
            publications {
                code(MavenPublication) {
                    // 移除原配置中多余的空格,避免语法报错
                    artifactId = gradle.platforms['artifactName']
                    from components.java
                }
                shadow(MavenPublication) {
                    artifactId = name
                    shadow.component(it)
                }
            }
        }
    }
}
  1. 可选优化
    如果不是所有子项目都需要打shadow包,不需要在subprojects块中统一应用shadow插件,仅在if (name in gradle.platforms)判断成立的分支内给对应子项目应用插件即可,减少不必要的构建开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:33:14