javassist 无法使用 spring 启动 jar

javassist not working with spring boot jar

我有一个 spring 引导应用程序 gradle 使用以下依赖项

compile('org.springframework.boot:spring-boot-starter-data-jpa')

此依赖项包括库中的 javassist-3.21.0-GA.jar。 当我 运行 STS IDE 中的应用程序使用 运行 作为 spring 启动应用程序时,一切正常。 但是当我 运行 spring 应用程序的引导 jar 使用命令 java -jar <application-jar> 然后javassist抛出以下异常

javassist.NotFoundException: <class name>

默认情况下,Javassist 仅从 class 路径查找 classes。但是 Spring Boot 在将它捆绑在一个自执行文件中时使用它自己的 class 加载器层次结构。因此,您需要手动注册此 class 加载程序。看看 ClassPool#appendClassPath on how to include additional class path elements。您需要将 classes ClassLoader 包含在 LoaderClassPath 中。

如果你想对 springboot 用户 classes 执行字节码分析,那么唯一的方法是提取 springboot jar 并将每个 class 添加到 classPath 以便javassist 可以对其进行字节码分析。

你需要这个!!!

ClassPool classPool = ClassPool.getDefault();
classPool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader());

https://www.kagura.me/dev/20190923102501.html