scan路由扫描问题

scan路由扫描com包报错如果加上cofig就没事

1.png2.png

评论区

JFinal

2020-12-24 15:07

报什么错?

java填坑分

2020-12-24 15:10

java.lang.NoClassDefFoundError: org/springframework/beans/factory/FactoryBean

java填坑分

2020-12-24 15:13

报错内容找不到factoryBean

java填坑分

2020-12-24 15:17

这样就能扫描成功:me.scan("com.config.");

java填坑分

2020-12-24 15:25

@JFinal 报错内容找不到factoryBean

JFinal

2020-12-24 15:30

@java填坑分 报错找不到 factoryBean,这个肯定与 jfinal 无关了

因为 jfinal 诞生十年来,从来都没提到过什么 factoryBean,这东东是 spring 里的东东

jfinal 的 scan 只扫描 @Path 注解,绝不理会其它任何东东

JFinal

2020-12-24 15:32

扫描代码很简单,一共才一百多行 java 代码:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/PathScanner.java

只关注 @Path 注解,其它一概跳过,所以,绝对不可能出现 factoryBean 这种字眼

java填坑分

2020-12-24 15:33

@JFinal 那为什么加上me.scan("com.config.")这样就能扫描成功呢

java填坑分

2020-12-24 15:34

@JFinal 只扫描com就报错

java填坑分

2020-12-24 15:35

@JFinal new PathScanner(basePackage, this, classFilter).scan();这个只扫描com里面的path是空的估计是这个错误引起的

JFinal

2020-12-24 15:46

@java填坑分 jfinal 源码只有 3 万行,里头没有 factoryBean 字眼,肯定是不会出这个异常的

你那里出现了 factoryBean 字眼,证明肯定是 jfinal 之外的因素,例如你的项目中同时用到了 spring ,而 spring 抛出了 factoryBean 有关的异常

JFinal

2020-12-24 16:38

@java填坑分 你的问题让我发现一个值得改进的地方:
https://gitee.com/jfinal/jfinal/commit/1dc557f53cafb08d61145a3d6d50d3ec1116ec55

也就是说,扫描是一种主动行为,那么 pom.xml 中的 provided 依赖在某种情况下会被扫描并被 loadClass,从而抛出 ClassNotFoundException、NoClassDefFoundError 异常

但如果你将扫描的包限定在你自己的项目之中,扫描范围有限,一般碰不到这种情况

最后,这个仍然与你碰到的 factoryBean 异常无关

JFinal

2020-12-24 16:40

补充一下,我看到你的扫描范围很大,或许也会碰到 ClassNotFoundException 的问题,可以用一下未发布到中心库的最新版本,用法如下:
https://jfinal.com/share/2093

元旦节那天我再发个新版本

java填坑分

2021-01-07 10:14

谢了,解决了我自己又加了一层包,其实你可以给个设定参数让用户自己设定扫描地址

JFinal

2021-01-07 11:34

@java填坑分 新版本 2021 年 1 月 1 号已经发布到 maven 中心库了,你使用 scan("com.") 也支持了

用新版本试一试

java填坑分

2021-02-19 16:55

好的谢了啊波总

热门反馈

扫码入社