解决 Gradle 构建错误:Could not get unknown property ‘withoutJclOverSlf4J’

解决 Gradle 构建错误:Could not get unknown property ‘withoutJclOverSlf4J’

在构建 Spring 源码或其他基于 Gradle 的项目时,可能会遇到如下错误:

Could not get unknown property 'withoutJclOverSlf4J' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

本文将详细解析该错误的原因,并介绍如何处理此问题。


错误解析

该错误信息表明,在项目的某个 Gradle 构建脚本中,尝试使用名为 withoutJclOverSlf4J 的属性,但 Gradle 在当前依赖处理器(DependencyHandler)中找不到这个属性。

例如,在某处依赖声明中可能存在类似下面的代码:

testCompile("org.apache.tiles:tiles-core:${tiles3Version}", withoutJclOverSlf4J)

这行代码的意思是,在添加 tiles-core 依赖时,额外传入一个配置参数 withoutJclOverSlf4J,目的是排除某些传递依赖(通常是为了排除日志桥接库 jcl-over-slf4j)。然而,如果没有在项目中定义该属性,就会导致 Gradle 报出“unknown property”的错误。


错误原因

出现此错误的主要原因有以下几点:

  1. 属性未定义
    withoutJclOverSlf4J 是一个自定义属性,通常用于在添加依赖时对传递依赖进行排除。但如果在构建脚本中没有对其进行定义,Gradle 就无法识别这个属性,进而报错。
  2. 加载顺序问题
    如果该属性定义在某个配置文件中,但加载顺序不对,导致在使用该属性时尚未定义,也会出现类似问题。
  3. 拼写或作用域错误
    如果属性名称拼写错误,或者定义的作用域不正确,也会导致 Gradle 找不到该属性。

处理方式

1. 定义 withoutJclOverSlf4J 属性

解决该问题的最直接方法是在项目的根 build.gradle 文件中使用 ext 块定义该属性。例如:

ext.withoutJclOverSlf4J = { dependency ->dependency.exclude group: "org.slf4j", module: "jcl-over-slf4j"
}

这样定义后,在引用该属性时(例如在 testCompile 声明中),Gradle 就能够正确执行闭包,排除 jcl-over-slf4j 模块。

2. 检查加载顺序

确保上述定义在所有子项目加载之前就已执行。可以将该定义放在根项目的最前面,或者单独放到一个公共的配置文件中,然后在 settings.gradle 或根 build.gradle 中提前加载。

3. 检查拼写和作用域

  • 拼写:确保在定义时和引用时名称完全一致(大小写敏感)。
  • 作用域:如果你在子项目中引用此属性,请确保该属性在根项目中定义后,可以在子项目中访问到。

总结

错误 “Could not get unknown property ‘withoutJclOverSlf4J’” 的根本原因在于在依赖声明中使用了一个未定义的自定义属性。解决方法如下:

  • 在根 build.gradle 文件中定义 withoutJclOverSlf4J,例如:

    ext.withoutJclOverSlf4J = { dependency ->dependency.exclude group: "org.slf4j", module: "jcl-over-slf4j"
    }
    
  • 确保该属性定义在所有子项目加载之前。

  • 检查属性名称是否正确且在整个项目中保持一致。

通过以上方法,Gradle 就能正确识别并使用 withoutJclOverSlf4J 属性,从而避免构建报错。希望这篇文章对你解决问题有所帮助!


参考资料:

blog.csdn.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mcp 接freecad画齿轮

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""创建一个渐开线…

【大前端系列19】JavaScript核心:Promise异步编程与async/await实践

JavaScript核心:Promise异步编程与async/await实践 系列: 「全栈进化:大前端开发完全指南」系列第19篇 核心: 深入理解Promise机制与async/await语法,掌握现代异步编程技术 📌 引言 在JavaScript的世界中,异步编程是无…

如何排查java程序的宕机和oom?如何解决宕机和oom?

排查oom 用jmap生成我们的堆空间的快照Heap Dump(堆转储文件),来分析我们的内存占用 用可视化工具,例如java中的jhat分析Heap Dump文件 ,它分析完会通过一个浏览器打开一个可视化页面展示分析结果 根据oom的类型来调…

什么是 OLAP 数据库?企业如何选择适合自己的分析工具

引言:为什么企业需要 OLAP 数据库? 你是否曾经经历过这样的场景: 市场部门急需一份用户行为分析报告,数据团队告诉你:“数据太大了,报表要跑 4 个小时”;业务负责人在会议中提出一个临时性分析…

测试:认识Bug

目录 一、软件测试的生命周期 二、bug 一、软件测试的生命周期 软件测试贯穿于软件的生命周期。 需求分析: ⽤⼾⻆度:软件需求是否合理 技术⻆度:技术上是否可⾏,是否还有优化空间 测试⻆度:是否存在业务逻辑错误、…

综合实验2

1、sw1和sw2之间互为备份 [sw1]interface Eth-Trunk 0 (创建聚合接口) [sw1-Eth-Trunk0]trunkport g0/0/1 (将物理接口划入到聚合接口中) [sw1-Eth-Trunk0]trunkport g0/0/2 [sw2]interface Eth-Trunk 0 [sw2-Eth-T…

【ArcGIS】ArcGIS10.6彻底卸载和ArcGIS10.2安装全过程

卸载python3后,解决了ArcGIS与python3冲突问题后,软件可以正常打开使用了 但是还是出现了问题 用ArcGIS 进行空间分析时,中间操作没有任何报错和问题,但是就是没有运行结果 在别人的软件上操作一遍可以出现运行结果 关闭确有这个,但真的不是我给它的运行时间不够,反反复复试…

Django之旅:第五节--Mysql数据库操作(一)

Django开发操作数据库更简单,内部提供了ORM框架 一、安装第三方模块 pip install mysqlclient注:最新的django框架需要使用mysqlclient模块,之前pymysql模块与django框架有编码兼容问题。 二、ORM 1、ORM可以帮助我们做两件事:…

docker部署mongodb数据库

1、下载 MongoDB 镜像 使用Docker部署MongoDB 之前,我们需要从 Docker Hub 上下载 MongoDB 镜像。这里我们下载最新版本的 MongoDB 镜像,使用以下命令进行下载: docker pull mongo:latest 下载完成后,我们就拥有了最新版本的 Mon…

Enhanced PEC-YOLO:电力施工场景安全装备检测的轻量化算法解析

目录 一、核心概述 二、核心创新点 1. ​C2F_Faster_EMA模块 2. ​SPPF_CPCA多尺度模块 3. ​BiFPN颈部网络

【人工智能】解锁大模型潜力:Ollama 与 DeepSeek 的分布式推理与集群部署实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的快速发展,其推理能力在自然语言处理、代码生成等领域展现出巨大潜力。然而,单机部署难以满足高并发、低延迟的需…

RTMP推流服务器nginx在linux上的编译部署

RTMP(Real-Time Messaging Protocol)推流确实需要服务器支持‌。RTMP推流服务器的主要功能是接收来自推流客户端的数据流,对其进行处理和转发。服务器会根据RTMP协议与客户端建立连接,处理推流数据(如转码、录制等&…

PyQt6实例_批量下载pdf工具_主线程停止线程池

目录 前置: 代码: 视频: 前置: 1 本系列将以 “PyQt6实例_批量下载pdf工具”开头,放在 【PyQt6实例】 专栏 2 本系列涉及到的PyQt6知识点: 线程池:QThreadPool,QRunnable; 信号与…

Tomcat生产服务器性能优化

试想以下这个情景:你已经开发好了一个程序,这个程序的排版很不错,而且有着最前沿的功能和其他一些让你这程序增添不少色彩的元素。可惜的是,程序的性能不怎么地。你也十分清楚,若现在把这款产品退出市场,肯…

正则表达式-笔记

文章目录 一、正则表达式二、正则表达式的基本语法字符类普通字符非打印字符特殊字符 量词限定符锚点修饰符(标记) 三、在 Python 中使用正则表达式简单搜索提取信息替换文本 参考 从验证用户输入,到从大量文本中提取特定信息,再到…

Qwen-0.5b linux部署

参考链接 https://blog.csdn.net/imwaters/article/details/145489543 https://modelscope.cn/models/modelscope/ollama-linux 1. ollama安装 # 安装ModelScope工具包,用于下载和管理AI模型 pip install modelscope# 下载Ollama的Linux版本安装包 # --model 指定…

【深度学习】GAN生成对抗网络:原理、应用与发展

GAN生成对抗网络:原理、应用与发展 文章目录 GAN生成对抗网络:原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…

【AI速读】CNN图像处理单元的形式化验证方法

近年来,卷积神经网络(CNN)在图像处理和计算机视觉领域取得了巨大成功,如人脸识别、姿态估计等。然而,基于CNN的图像处理单元设计复杂,验证工作面临巨大挑战。传统的仿真验证方法难以覆盖其庞大的配置空间,且耗时费力。本文将介绍一种创新的形式化验证(Formal Verificat…

【新人系列】Golang 入门(八):defer 详解 - 上

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12898955.html 📣 专栏定位:为 0 基础刚入门 Golang 的小伙伴提供详细的讲解,也欢迎大佬们…

鸿蒙开发:了解Canvas绘制

前言 本文基于Api13 系统的组件无法满足我们的需求,这种情况下就不得不自己自定义组件,除了自定义组合组件,拓展组件,还有一种方式,那就是完全的自绘制组件,这种情况,常见的场景有,比…