2020-12-24 16:40

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

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

2020-12-24 16:38

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

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

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

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

2020-12-24 16:06

@_imlzw_ jrebel 这东西出来很多年了,热加载用得最多的就是它了,开发用着是不错的,但是这东东是收费的商业项目

2020-12-24 15:46

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

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

2020-12-24 15:32

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

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

2020-12-24 15:30

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

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

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

2020-12-24 15:09

@java填坑分 如果你的项目依赖几百个 jar 包,从根目录扫描将扫描所有 jar 包中的所有文件,会影响启动速度

此外,第三方依赖的 jar 包中可能也有 @Path 配置过的控制器被扫描到,而这个可能是你不希望的事情

还有一种情况是,第三方 jar 包可能你是自己公司的别的项目中的 jar 包,而在你当前项目中只用到了一部分功能,不希望使用里头的 controller, 所以不希望被扫描到

2020-12-24 15:07

报什么错?

2020-12-24 14:52

@_imlzw_ undertow.devMode = false; 不影响其它功能的开发体验,不支持热部署

2020-12-24 12:22

至于 Java 的热部署,阿里这类大厂在很多年前就尝试过,最后失败了

2020-12-24 12:21

初衷是为了开发体验的流畅,新增类、方法等动作不用去手动重启服务

由于采用的是 class loader 方案,所以不可能做到彻底。jrebel 这类专门性的热加载第三方花了很大的规模与复杂度才做得更完善,但仍然不彻底

无法做彻底的根本原因是 java 是静态类型语言


你谈到的下面的内容:
而我经常只是修改类方法内容,编译,浏览器查看变更结果。要实现这个功能,只需要debug模式运行Application.main即可实现。

其实可以通过一个简单的配置就可以了:
undertow.devMode = false;

所以说,有没有这个功能,对于不需要的同学来说,关掉它就可以了,不影响原有习惯,也不影响习惯使用 jrebel 的同学继续使用 jrebel

2020-12-24 11:57

视频播放就扩展一下 Render ,做一个自己的 StreamRender 出来:
public class StreamRender extends Render {
...
}

然后用的时候:
render(new StreamRender());

2020-12-23 22:37

将代码以及异常补充一下,当前信息量不足以推断是什么

2020-12-23 11:44

社区已经有过很多分享,这里有一个:
https://jfinal.com/share/281