Spring Maven项目集成Google Calendar API时build.gradle文件报错
解决Spring项目集成Google Calendar API时的Gradle构建错误
问题情况
我在Spring项目里尝试集成Google Calendar API,跟着官方步骤操作,但执行命令gradle -q run时出现了错误:
位置:构建文件 'C:\Users\Owner\Documents\workspace\Project\build.gradle' 第17行
问题:评估根项目'Project'时出错。提供的字符串模块符号 'org.springframework.security.core.userdetails.UsernameNotFoundException' 无效。示例符号:'org.gradle:gradle-core:2.2', 'org.mockito:mockito-core:1.9.5:javadoc'。
附上我当前的build.gradle代码:
apply plugin: 'java' apply plugin: 'application' mainClassName = 'Quickstart' sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' repositories { mavenCentral() } dependencies { compile 'com.google.api-client:google-api-client:1.23.0' compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0' compile 'com.google.apis:google-api-services-calendar:v3-rev285-1.23.0' compile 'org.springframework.transaction.annotation.Transactional' compile 'org.springframework.security.core.userdetails.UsernameNotFoundException' compile 'org.springframework.security.core.userdetails.UserDetailsService' compile 'org.springframework.security.core.userdetails.UserDetails' compile 'org.springframework.security.core.authority.SimpleGrantedAuthority' compile 'org.springframework.security.core.GrantedAuthority' compile 'org.springframework.beans.factory.annotation.Autowired' compile 'org.springframework.stereotype.Service' compile 'org.springframework.security.core.context.SecurityContextHolder' compile 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken' compile 'org.springframework.security.authentication.AuthenticationManager' compile 'org.springframework.beans.factory.annotation.Autowired' compile 'org.slf4j.LoggerFactory' compile 'org.slf4j.Logger' compile 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' compile 'org.springframework.data.repository.query.Param' compile 'org.springframework.data.jpa.repository.Query' compile 'org.springframework.data.jpa.repository.JpaRepository' compile 'javax.persistence.*' compile 'javax.persistence.Table' compile 'javax.persistence.ManyToOne' compile 'javax.persistence.JoinColumn' compile 'javax.persistence.Id' compile 'javax.persistence.GenerationType' compile 'javax.persistence.GeneratedValue' compile 'javax.persistence.Entity' compile 'javax.persistence.OneToOne' compile 'javax.persistence.NamedQuery' compile 'javax.persistence.NamedQueries' compile 'javax.persistence.FetchType' compile 'javax.persistence.CascadeType' }
问题根源
你这踩了个新手常见的坑:把Java类/注解的全限定名当成了Gradle的依赖坐标!Gradle的dependencies块里需要的是groupId:artifactId:version格式的依赖包坐标,不是单个类的路径。比如UsernameNotFoundException是Spring Security核心包中的类,你只需要引入spring-security-core这个依赖包,包里的所有类自然就能在代码中使用,完全不需要把每个类都列出来。
修复后的build.gradle配置
把错误的依赖声明全部替换成正确的依赖包,以下是调整好的配置:
apply plugin: 'java' apply plugin: 'application' mainClassName = 'Quickstart' sourceCompatibility = 1.8 targetCompatibility = 1.8 version = '1.0' repositories { mavenCentral() } dependencies { // 保留你原来正确的Google Calendar API相关依赖 compile 'com.google.api-client:google-api-client:1.23.0' compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0' compile 'com.google.apis:google-api-services-calendar:v3-rev285-1.23.0' // SLF4J基础依赖,解决LoggerFactory/Logger的引用问题 compile 'org.slf4j:slf4j-api:1.7.30' // Spring核心上下文依赖,包含@Autowired、@Service等注解 compile 'org.springframework:spring-context:5.3.20' compile 'org.springframework:spring-beans:5.3.20' // Spring Security核心依赖,覆盖你列的所有Security相关类 compile 'org.springframework.security:spring-security-core:5.6.3' // Spring Data JPA + JPA API依赖,覆盖你列的JPA相关注解和接口 compile 'org.springframework.data:spring-data-jpa:2.6.4' compile 'javax.persistence:javax.persistence-api:2.2' // 可选:如果需要具体的JPA实现(比如Hibernate),可以添加 // compile 'org.hibernate:hibernate-core:5.6.9.Final' }
额外说明
- 我保留了你原本正确的Google Calendar API依赖,仅替换了错误的部分;
- 补充了SLF4J依赖,因为你代码里用到了
LoggerFactory,不加会出现类找不到的错误; - 版本号选择的是与Java 8兼容的稳定版本,你可以根据项目的Spring版本调整成一致的;
- 原配置里重复写了
@Autowired的依赖项,我直接删除了重复内容。
修改完成后重新执行gradle -q run,应该就能正常构建和运行了。
内容的提问来源于stack exchange,提问作者Brian Walzer
相关产品推荐
相关产品推荐

