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());
我有一个 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());