由于需要在Springboot项目中动态替换一个方法的实现,所以引入了javassist,然而在IDEA中开发时一切正常,但是java -jar启动就报错:Caused by: javassist.NotFoundException:

在stackoverflow: https://stackoverflow.com/questions/48437113/javassist-not-working-with-spring-boot-jar 看到有人遇到了同样的问题,大致就是两种启动方式使用不同的ClassLoader导致javassist默认的classpath中找不到对应的类,我们需要手动把当前的ClassLoader加载到ClassPool中,怎么做到这点呢,其实很简单,只需要一行代码:classPool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));添加以后本地IDEA中开发也可以正常使用。完整代码如下:

ClassPool classPool = ClassPool.getDefault();
//将当前ClassLoader添加到ClassPath
classPool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
//Your Code...
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐