Java项目无法加载最新的class
问题
一个Java项目,无论怎么替换jar包Jar1,运行中某个类A无法加载到最新的class,一直以替换前的旧版本运行导致报错;而Jar1中新加入的类B可以被正确执行,每次替换jar包都能加载到B最新的class。
背景
此Java项目依赖于2个目录加载多个jar包,bin目录和lib目录(bin优先于lib,因为在classpath中靠前),正常情况下bin目录中有1个jar包,lib目录中有很多jar包,此次替换的jar包Jar1位于lib目录。
原因
通过打印类A的class的加载路径找到答案
class.getProtectionDomain().getCodeSource().getLocation()
上一次替换Jar1时,将更新的Jar1误多传入到bin目录下一份,当然lib目录下也替换了。启动,没有问题,此时系统加载的是bin下的Jar1。
这次再替换Jar1时,就因为优先加载了bin目录下的old-Jar1,覆盖了lib目录下的new-Jar1,导致类A新的class无法被加载,而类B因为是新加入的类,却可以被加载到。
解决
删除bin目录下的old-Jar1包即可
大神做个友链好吗