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

如何将Spring Boot应用A作为依赖引入应用B,使双方组件均可运行?

可行性与实现步骤

完全可行,这种场景在Spring Boot中很常见(比如把通用业务模块封装为独立依赖供多个应用复用),具体操作步骤如下:

1. 调整应用A的打包配置

Spring Boot默认打包的jar是可执行jar,包含了Tomcat等嵌入式容器依赖,无法直接作为普通依赖被其他项目引用。需要修改A的pom.xml,生成可被依赖的普通jar:

方式一:生成双jar(推荐)

保留可执行jar的同时,生成一个用于依赖的jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 生成带classifier的可执行jar,默认jar作为依赖包 -->
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>

方式二:禁用可执行jar(仅作为依赖)

如果A不需要单独运行,直接设置打包为普通jar:

<packaging>jar</packaging>

<build>
    <plugins>
        <!-- 移除repackage目标,避免生成可执行jar -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>repackage</id>
                    <phase>none</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 将应用A安装到本地/私有仓库

执行Maven命令把A的jar包安装到本地仓库(供B本地开发使用),或者发布到私有仓库(团队协作场景):

mvn clean install

3. 在应用B中引入A的依赖

修改B的pom.xml,添加A的坐标依赖:

<dependencies>
    <dependency>
        <groupId>com.example</groupId> <!-- 替换为A的groupId -->
        <artifactId>app-a</artifactId> <!-- 替换为A的artifactId -->
        <version>1.0.0</version> <!-- 替换为A的版本号 -->
    </dependency>
    <!-- B自身的其他依赖... -->
</dependencies>

4. 确保B能扫描到A的组件

Spring Boot默认只扫描主类所在包及其子包的组件(Controller、Service、DAO等),所以需要让B扫描到A的包:

方式一:扩展组件扫描范围

在B的主类上添加@ComponentScan,指定A和B的包路径:

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.appa", "com.example.appb"})
public class AppBApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppBApplication.class, args);
    }
}

方式二:导入A的启动类配置

如果A的主类已经用@SpringBootApplication(包含了@ComponentScan),可以直接在B的主类上用@Import导入A的启动类:

@SpringBootApplication
@Import(AppAApplication.class)
public class AppBApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppBApplication.class, args);
    }
}

方式三:使用自定义配置类

在A中创建一个配置类,专门负责扫描A的组件:

@Configuration
@ComponentScan(basePackages = "com.example.appa")
public class AppAConfig {
}

然后在B的主类上导入这个配置类:

@SpringBootApplication
@Import(AppAConfig.class)
public class AppBApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppBApplication.class, args);
    }
}

5. 注意事项

  • 版本兼容:确保A和B使用的Spring Boot版本一致,避免依赖冲突。
  • 数据库配置:如果A和B共用同一个数据库,需保证两者的数据源、DAO配置兼容;若A的配置需要被B覆盖,可在A的配置类中使用@ConditionalOnMissingBean等条件注解。
  • 依赖冲突:若A和B存在相同依赖但版本不同,需在B的pom.xml中通过<dependencyManagement>统一版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:26:27