You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot升级后无法引入同项目不同目录下的包问题求助

Spring Boot 2.6.7升级后跨模块导入同前缀包失败的解决思路

问题场景

项目结构如下:

appName
 --- model
     --- src
         ---- main
              --- basePackageName
                  ---packageOne
 --- service
    --- src
        ---- main
             ---- basePackageName
                  ---packageTwo

原本在Spring Boot 2.1.6.RELEASE版本中,packageTwo可以正常导入packageOne的类,但升级至2.6.7版本后,所有packageOne的导入语句变灰,Gradle构建时提示无法解析符号,认为packageOne不存在。已确认项目存在@SpringBootApplication注解,且两个包拥有相同前缀:com.example.packageOne和com.example.packageTwo。

启动类代码:

@SpringBootApplication
public class Application {
    
    public static void main(String[] args) {
        
    }
}

解决思路

  • 检查Gradle模块依赖配置
    service模块需要显式声明对model模块的依赖,在service模块的build.gradle中添加:

    implementation project(':model')
    

    同时确认根目录的settings.gradle已包含两个模块:

    include ':model', ':service'
    
  • 显式指定Spring组件扫描范围
    尽管两个包前缀相同,仍需确保Spring能扫描到所有需要的包。修改启动类的@SpringBootApplication注解,显式指定扫描根路径:

    @SpringBootApplication(scanBasePackages = "com.example")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    注意:如果启动类本身就在com.example包下,默认会扫描该包及其子包,否则必须手动指定扫描范围。

  • 清理IDE缓存并同步Gradle

    • 清理IDE缓存(如IntelliJ IDEA执行File -> Invalidate Caches...并重启)
    • 执行Gradle清理构建命令:
      ./gradlew clean build
      
    • 在IDE中重新同步Gradle项目,确保依赖和源码被正确识别
  • 验证模块源码路径配置
    检查model模块的build.gradle中sourceSets配置,确保源码路径正确指向src/main/java,避免自定义配置导致packageOne的代码未被Gradle识别为可编译的源码。默认配置无需修改,若有自定义配置需确认如下:

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者lalala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:52:35