开发一个基于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
mvn clean install
最后,再让你的项目依赖于这个新的依赖即可。你以前的方式是个定时炸弹,java 的类加载机制先加载哪个 jar 包中的 class 是不确定的,你两个 jar 包中都有相同的 class 存在
当然,如果你嫌麻烦,还可以试一下我以前自创的一个新方法,在你的项目的 JFinalConfig 继承类中的 configConstant 中添加下面一行代码:
getClass().getClassLoader().loadClass(你改掉源码的那个类的在此);
也就是说你的修改的源码处在 JFinalConfig 子类所在的 jar 包之中,通过手动 loadClass(...) 先从这里加载,当然这种方式也可能有风险,你先试一试