jfinal-undertow src下的class打jar包

开发一个基于jfinal-undertow的maven项目,依赖一个第三方包。由于此包有bug,对此包内的部分类进行一些修改,在src下创建了相同的包名和类名;

在eclipse开发环境直接启动是没问题的。

参考 http://www.jfinal.com/doc/1-3  通过mvn clean package直接打入将补丁class打入了项目的jar包中。通过start.bat启动后运行发现bug依旧,最后发现加载的是第三方包中的class,而不是修改后的class。

请教大家有无好的解决办法?

ps:

我现在的解决办法是发布到生产环境时,先把修改的类手工更新到第三方包中。


评论区

JFinal

2018-12-06 11:21

将这个第三方的源码拿到,然后将版本或者将项目名改一下,然后改掉源码中的 bug,再通过下面的命令安装到你本地 maven 库中:
mvn clean install

最后,再让你的项目依赖于这个新的依赖即可。你以前的方式是个定时炸弹,java 的类加载机制先加载哪个 jar 包中的 class 是不确定的,你两个 jar 包中都有相同的 class 存在

当然,如果你嫌麻烦,还可以试一下我以前自创的一个新方法,在你的项目的 JFinalConfig 继承类中的 configConstant 中添加下面一行代码:
getClass().getClassLoader().loadClass(你改掉源码的那个类的在此);

也就是说你的修改的源码处在 JFinalConfig 子类所在的 jar 包之中,通过手动 loadClass(...) 先从这里加载,当然这种方式也可能有风险,你先试一试

124653847atqq.com

2018-12-08 20:00

@JFinal
多谢詹总如此详细的解释。
经过测试第一种方案没问题,第二种方案确实存在风险,问题依旧。现在看还是按照第一种方案来实施。
再次感谢!

热门反馈

扫码入社