使用Proguard混淆后spring中的bean无法自动加载分析 📅 发布时间:2026/7/5 3:20:10 👁️ 浏览次数: 问题现象使用proguard后的jar中的Service类无法被自动加载未使用proguard的可以被自动加载。*************************** Description: Field dictService in com.xx.xx.xx.xx.service.XxService required a bean of type com.xx.xx.xx.dict.service.DictService that could not be found. The injection point has the following annotations: - org.springframework.beans.factory.annotation.Autowired(requiredtrue) Action:问题追踪org.springframework.core.io.support.PathMatchingResourcePatternResolver#findPathMatchingResourcesif (rootDirResources null) { rootDirResources this.getResources(rootDirPath); if (this.useCaches null || this.useCaches) { this.rootDirCache.put(rootDirPath, rootDirResources); } }org.springframework.core.io.support.PathMatchingResourcePatternResolver#doFindAllClassPathResourcesprotected SetResource doFindAllClassPathResources(String path) throws IOException { SetResource result new LinkedHashSet(16); ClassLoader cl this.getClassLoader(); EnumerationURL resourceUrls cl ! null ? cl.getResources(path) : ClassLoader.getSystemResources(path); while(resourceUrls.hasMoreElements()) { URL url (URL)resourceUrls.nextElement(); result.add(this.convertClassLoaderURL(url)); } if (!StringUtils.hasLength(path)) { this.addAllClassLoaderJarRoots(cl, result); } return result; }此处 cl.getResources(path) 无法读取到对应的目录的jar编写测试类为了方便调试编写测试类读取classloader中包含对应包且可以读取的jarpackage com.xx.xx.xx.classloader; import java.io.IOException; import java.net.URL; import java.util.Enumeration; /** * author pp_lan * since 2026-03-09 */ public class ProguardTest { public static void main(String[] args) { String path com/xx/xx/; ClassLoader cl ProguardTest.class.getClassLoader(); try { EnumerationURL urls cl.getResources(path); if (!urls.hasMoreElements()) { System.out.println(未找到任何资源。); // 打印该类加载器能看到的 URL 列表仅限 URLClassLoader if (cl instanceof java.net.URLClassLoader) { java.net.URLClassLoader ucl (java.net.URLClassLoader) cl; for (java.net.URL url : ucl.getURLs()) { System.out.println(Classpath 条目: url.getFile()); } } } else { while (urls.hasMoreElements()) { System.out.println(找到资源: urls.nextElement().toString()); } } } catch (IOException e) { e.printStackTrace(); } } }分析比较混淆之前的jar和之后的jar问题最大原因:1. class存在反编译工具打开后能看到对应的类及路径但是目录条目本身不存在修改需要添加目录保留# 保留目录条目确保类加载器能识别目录资源 -keepdirectories验证测试类验证通过找到资源: file:/D:/workspace/xx/xx/retrieve/target/test-classes/com/xx/xx/ 找到资源: file:/D:/workspace/xx/xx/retrieve/target/classes/com/xx/xx/ 找到资源: jar:file:/D:/repository/com/xx/xx/xx-common/1.0.1-SNAPSHOT/xx-common-1.0.1-20260309.022850-2.jar!/com/xx/xx/ 找到资源: jar:file:/D:/repository/com/xx/xx/xx-base/1.0.0-SNAPSHOT/xx-base-1.0.0-SNAPSHOT.jar!/com/xx/xx/项目启动验证通过启动成功
moto razr 40 Ultra 外屏玩机攻略:教你添加应用,小屏也有大用处 作为摩托罗拉折叠屏的热门机型,moto razr 40 Ultra 的外屏是一大亮点,小巧的尺寸兼顾了便捷查看和快速操作,但不少用户入手后仅用外屏看时间、接电话,完全浪费了它的拓展潜力。其实这款机型的外屏支持自定义添加各类应用ÿ… 2026/5/17 11:09:17
保姆级拆解Agent Skills:手把手教你给AI装技能 文章目录🤖 1. Agent Skills 到底是什么?Agent Skills 就是:🎭 用生活理解🎪 2. Skills 到底有啥用?🎯 案例一:让智能体不再“只会说你好”🎯 案例二:让智能体… 2026/5/17 11:09:16
日常出行中常用的导航二维码怎么制作?含9大应用场景分析 现代生活中,我们日常出行会用到各种各样的二维码,比如扫码乘车、扫码导航。要导航去到一个陌生的地方,比如去一个新公司面试、前往一个很小众旅游城市找定好的民宿、跨省到一个酒店参加亲戚的婚礼…… 往往需要一个比较准确的导航二维码&… 2026/7/4 8:55:03
多层金属的“异质变形“为什么是矫平工艺的终极难题? 在金属板材加工领域,复合板(又称金属层状复合材料)正越来越多地应用于石油化工、海洋工程、核电和食品制药等行业。校平机作为消除板材残余应力、恢复平整度的关键设备,在面对复合板时遇到了与单质金属完全不同的技术挑战。复合板… 2026/7/5 3:16:58
opencode最新版本安装使用 1.中文官网文档 https://opencode.ai/zh 2.安装步骤(windows推荐使用) win R 打开windows命令终端,执行安装命令 curl -fsSL https://opencode.ai/install | bash通过安装结果,opencode的环境变量没有写入成功,我… 2026/7/5 3:14:57
Codex Desktop 接入 PackyCode / PackyAPI 后 401 报错排查:Key、Base URL 和模型名怎么对应 摘要在 Codex Desktop 中使用 PackyCode 或 PackyAPI 时,常见报错包括 401 Unauthorized、Invalid API key、Model is not available、stream disconnected before completion 等。很多问题并不是 Key 真的过期,而是 Key、Base URL、模型名称和 Codex 配… 2026/7/5 3:14:57
OpenAI Python库是什么?一文看懂通用大模型统一调用标准 开篇 很多刚接触大模型开发的新手会有一个误区:OpenAI Python库只能调用GPT系列模型。实际恰恰相反,如今国内几乎所有开源大模型(通义千问Qwen3、Llama、DeepSeek、GLM等),只要通过vLLM、Text Generation Inference推理… 2026/7/5 3:12:56
预见性切割:机器学习如何提前预警碳带分切机的报废风险 在热转印碳带的生产链条中,分切机是决定成品质量的“最后一道关卡”。这台将宽幅母卷分割为最终商品的设备,一旦发生非计划停机或核心部件报废,带来的不仅是维修成本,更是整批次产品的报废与交付周期的延误。传统维护模式依赖定期… 2026/7/5 3:10:56
django中实现密码加密 在utils_app\utils\ 中新建encryption.py# md5加密 import hashlib from django.conf import settings def md5(data):obj_md5hashlib.md5(settings.SECRET_KEY.encode(utf-8))obj_md5.update(data.encode(utf-8))return obj_md5.hexdigest()在视图中使用from utils_app… 2026/7/5 3:08:56
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36