Reflections 0.10.2类扫描IDE正常 jar包运行时查找类失效
Reflections 0.10.2 Jar包启动扫描不到类的核心原因
- 运行时类路径形态差异:你贴的写法在IDE里能正常运行,本质是因为IntelliJ、Eclipse启动时,编译后的class文件以独立文件形式存放在本地文件系统的输出目录,Reflections默认的类加载器可以直接遍历文件路径读取所有类资源;用
java -jar命令启动时,所有类被打包进Jar文件,资源以Jar协议形式存在,这个简化版构造方法没有显式指定适配Jar资源读取的类加载器,默认逻辑读不到Jar内部的类路径条目。 - 默认配置的资源协议支持不全:官方标注该写法兼容,仅指API语义层面的支持,不代表默认配置适配所有运行场景。0.10.2版本的这个旧构造方法会自动加载默认扫描配置,默认配置只支持扫描本地文件系统(file协议)的资源,没有注册Jar协议、嵌套Jar协议的解析规则,扫描时碰到Jar协议的资源会直接跳过,根本不会读取Jar包内的class信息。
- 嵌套Jar路径扫描逻辑缺失:如果你打的是可执行FatJar(比如SpringBoot、Maven Shade插件生成的包含所有依赖的单Jar包),业务类一般会放在Jar包内的
BOOT-INF/classes、lib这类嵌套目录下,旧构造方法的默认扫描逻辑只会遍历Jar包根路径的资源,不会递归进入这些嵌套路径扫描,自然拿不到标注了指定注解的类。
内容的提问来源于stack exchange,提问作者asgarov1
相关产品推荐
相关产品推荐

