Grails初学者升级2.x插件至3.3.2后应用启动失败求助
解决Grails 2插件升级到3.3.2启动失败的Spring Security依赖问题
我帮你梳理下这个问题的根源和解决办法:你遇到的FileNotFoundException找不到org.springframework.security.config.annotation.authentication.configurers.GlobalAuthenticationConfigurerAdapter.class,核心原因是Spring Security版本与Grails 3.3.2的依赖体系不兼容,加上直接复制Grails 2插件代码导致的API适配问题。下面是具体的解决步骤:
1. 锁定Spring Security Core插件的适配版本
Grails 3.3.x对Spring Security插件有明确的版本匹配要求,手动乱调依赖很容易引发冲突:
- 打开项目的
build.gradle,先删除所有手动添加的Spring Security相关依赖(比如直接引入的spring-security-web、spring-security-config等)。 - 在
plugins块中确保使用Grails 3.3.2适配的spring-security-core版本,比如:
这个版本是官方为Grails 3.3.x适配的,不要随意更换为其他版本。plugins { // 其他插件... compile 'org.grails.plugins:spring-security-core:3.2.3' }
2. 适配Spring Security API的代码变更
Grails 2到3的Spring Security插件API有较大变化,GlobalAuthenticationConfigurerAdapter在新版Spring Security(Grails 3.3用的是Spring Security 4.x)中已经被调整:
- 如果你在插件代码中继承了
GlobalAuthenticationConfigurerAdapter,需要替换为新版的API实现。比如原来的自定义认证配置类,可改为基于WebSecurityConfigurerAdapter的写法:import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder class CustomSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 你的认证配置逻辑 } } - 同时检查插件中其他Spring Security相关的代码,比如权限注解、过滤器配置等,确保适配Grails 3的插件API规范。
3. 清理缓存并重新构建项目
旧的依赖缓存和编译文件可能残留冲突的类,需要彻底清理:
- 执行命令清理Grails和Gradle缓存:
grails clean gradlew clean # Windows系统直接执行这个,Mac/Linux用./gradlew clean - 重新运行项目:
grails run-app
4. 解决Java 8的PermSize警告
你看到的PermSize参数警告是因为Java 8已经移除了该参数,需要修改启动配置:
- 打开项目的
gradle.properties,找到包含PermSize的配置行,替换为Metaspace参数:org.gradle.jvmargs=-XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m - 或者在IDE的启动配置中,删除
-XX:PermSize=1024m和-XX:MaxPermSize=2048m,替换为上面的Metaspace参数。
额外注意点
- Grails 3.x插件的目录结构和Grails 2完全不同,不要直接把Grails 2的
grails-app下的所有文件复制过来,要对应Grails 3插件的目录(比如代码放到src/main/groovy,资源放到src/main/resources)。 - 不要手动指定GORM、Hibernate、Spring Boot的版本,让Grails的依赖管理自动处理,避免版本冲突。
内容的提问来源于stack exchange,提问作者user9261804
相关产品推荐
相关产品推荐

