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

Spring Boot中如何跨目录访问其他目录的控制器或组件?

问题原因与可行解决方案

package com.sample.controller does not exist属于编译阶段报错,说明当前模块编译时没有加载到sample-core依赖里的对应类,或是依赖本身打包、Spring Boot组件扫描配置存在问题,可按以下顺序排查修复:

方案1:修复依赖引用与模块打包配置

  • 首先校验依赖标签的语法正确性,你贴出的依赖末尾</dependency缺少右尖括号,且必须明确指定和sample-core模块一致的版本号,修正后的依赖如下:
<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample-core</artifactId>
    <version>和sample-core模块的版本号完全一致</version>
</dependency>
  • 确认sample-core模块的打包配置:普通Spring Boot模块默认打包为可执行jar,类路径结构和普通依赖jar不同,其他模块无法引用其中的类,需要给sample-core的pom.xml添加如下配置,同时生成可执行文件和可被依赖的普通jar:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 配置修改完成后,先在sample-core根目录执行mvn clean install将模块安装到本地Maven仓库,再回到当前子模块执行编译校验。

方案2:配置Spring Boot包扫描规则

如果编译正常但运行时无法注入sample-core里的控制器、Service等组件,是因为Spring Boot默认只扫描启动类所在包及其子包的组件,需要手动指定扫描路径:

  • 在当前子模块的启动类上修改@SpringBootApplication注解,同时覆盖外部组件包和当前模块的根包,避免自身组件扫描失效:
@SpringBootApplication(scanBasePackages = {"com.sample.controller", "你当前模块的根包路径,例如com.sample.web"})
public class YourSubModuleApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourSubModuleApplication.class, args);
    }
}
  • 如果仅需引用sample-core里的实体类、工具类等非Spring管理的组件,直接import对应全类名即可,无需额外配置扫描规则。

方案3:校验多模块项目结构

确认项目结构符合Maven多模块规范,避免路径错误导致的依赖加载失败,标准结构参考:

sample(父模块,packaging类型为pom)
├── sample-core(子模块1,packaging类型为jar)
│   └── src/main/java/com/sample/controller (目标控制器所在路径)
└── sample-web(当前开发的子模块,依赖sample-core)
    └── src/main/java/com/sample/controllers/abcController.java

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:03