Javassist字节码检测在运行时为Springboot配置类创建NoClassDefFoundError

Javassist字节码检测在运行时为Springboot配置类创建NoClassDefFoundError,java,spring-boot,gradle,javassist,bytecode-manipulation,Java,Spring Boot,Gradle,Javassist,Bytecode Manipulation,我试图在构建时使用javassist和gradle构建来修改SpringBoot配置java类。我的意图是基于构建配置删除SpringBoot应用程序的依赖项jar(SpringSecurity)。首先,我使用下面的代码在javassist构建期间从配置类中删除了使用spring安全认证类的方法 ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.get("com.xxx.xxx.SpringDataConfig&quo

我试图在构建时使用javassist和gradle构建来修改SpringBoot配置java类。我的意图是基于构建配置删除SpringBoot应用程序的依赖项jar(SpringSecurity)。首先,我使用下面的代码在javassist构建期间从配置类中删除了使用spring安全认证类的方法

ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("com.xxx.xxx.SpringDataConfig");
cc.removeMethod(cc.getDeclaredMethod("auditor"));
cc.writeFile("./build/classes/java/main");
而gradle任务

task applyCodeChange(type: JavaExec) {
    group = "Execution"
    description = "Code config"
    classpath = sourceSets.main.runtimeClasspath
    main = "com.xxx.xxx.CodeConfig"
  }
it.tasks.jar.dependsOn it.tasks.applyCodeChange
在执行该特定项目的构建任务之后。结果jar将拥有修改后的类文件,而不使用该方法(通过使用Java反编译器进行验证)。但是当我试图运行这个jar时,我遇到了该方法使用的依赖项的NoClassDefFoundError。我还可以在该依赖项的反编译类文件中看到Import语句

下面是我试图删除的方法

 public AuditorAware<String> auditor() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    return () -> Optional.ofNullable(authentication.getName());
  }
public AuditorAware auditor(){
身份验证=SecurityContextHolder.getContext().getAuthentication();
return()->Optional.ofNullable(authentication.getName());
}
我总能看见

导入org.springframework.security.core.Authentication

在反编译类中,但不是org.springframework.security.core.context.SecurityContextHolder。我还确认了该类中没有其他方法在该文件中使用身份验证类,并且java.lang.NoClassDefFoundError始终用于该应用程序运行期间的org/springframework/security/core/Authentication