最近闲暇时写了一个hessian 小测试的工具,为了方便使用了spring boot。该测试工具最关键的步骤是动态加载每个测试模块对应的hessian api的jar包。开始的加载代码为:
URLClassLoader loader=new URLClassLoader(new URL[]{new URL("file:"+jarPathStrategy.fileStorePath(moduleName,jarname))}); loader.loadClass(className);
在IDE直接运行spring boot 的main函数,every thing is ok !
当我将项目编译成jar包,上传到测试环境执行:java -jar 后,发现通过URLClassLoader 无法找到hessian的类,一顿调试排查后,IDE 依旧OK,命令起到你jar 依旧无法工作。这是我考虑到是不是spring boot的classloader 比较特殊,不是systemclassloader。google一下,果不其然跟我想的一样,spring boot 的classloader 继承体系有所变化。具体参见此大神的实验( http://hengyunabc.github.io/s... )。遂修改代码:
URLClassLoader loader=new URLClassLoader(new URL[]{new URL("file:"+jarPathStrategy.fileStorePath(moduleName,jarname))},parentClassLoader); loader.loadClass(className);请输入代码