前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两种方式实现SpringBoot脚手架的依赖配置

两种方式实现SpringBoot脚手架的依赖配置

作者头像
编程随笔
发布2024-04-10 08:12:32
1130
发布2024-04-10 08:12:32
举报
文章被收录于专栏:后端开发随笔后端开发随笔

在基于Spring Boot脚手架创建项目时,通常会直接将spring-boot-starter-parent作为<parent>,如下示例:

代码语言:javascript
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

再添加其他相关stater组件依赖时可以不用再明确指定版本号了,非常方便:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

但是,当项目中存在多个Maven模块时,通常项目中的<parent>节点是自定义的,并不能直接设置为spring-boot-starter-parent,但是又需要便于使用Spring Boot脚手架,此时该如何处理呢?

实际上,跟踪spring-boot-starter-parent的pom文件配置后发现,它将<parent>设置为了spring-boot-dependencies

代码语言:javascript
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.10</version>
</parent>

真正的组件依赖是在spring-boot-dependencies中使用<dependencyManagement>进行管理的。

参考Spring Boot自身的组件依赖管理办法,针对在日常开发中既要便于使用Spring Boot脚手架,又不能直接将项目<parent>设置为spring-boot-starter-parent的场景,有2种解决办法:

方式一:将父项目的<parent>设置为spring-boot-starter-parent,然后在子项目中添加starter组件的依赖。

代码语言:javascript
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
    <module>xxx</module>
</modules>

方式二:在父项目中使用<dependencyManagement>管理spring-boot-dependencies依赖,这种方式就使用不到spring-boot-starter-parent中的一些基础配置了。

当父项目不设置<parent>时,可以通过<dependencyManagement>管理spring-boot-dependencies依赖,然后在子项目中添加starter组件的依赖。

代码语言:javascript
复制
<packaging>pom</packaging>
<modules>
    <module>xxx</module>
</modules>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.10</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

上述2种方式的区别在于:使用第一种方式可以直接使用Spring Boot脚手架的全部基础配置,更加便捷。

例如:使用第一种方式在子项目中使用spring-boot-maven-plugin插件打包时只需要添加依赖即可,无需其他任何配置就可以将项目打包为可执行jar包。

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

在使用第二种方式时使用spring-boot-maven-plugin插件打包为可执行jar包还需要额外的配置,并且必须明确指定插件版本号。

代码语言:javascript
复制
 <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 明确指定插件版本号,不指定会报错 -->
            <version>2.7.10</version>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- 明确指定启动类 -->
                <mainClass>org.test.springboot.implementation.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

当然,使用Spring Boot框架也可以不使用其任何基础配置,直接在依赖管理中明确指定各种starter组件的版本即可。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.7.10</version>
        <scope>test</scope>
    </dependency>
</dependencies>

但是这显然是一件吃累不讨好的事情,不是万不得已不要使用这种方式!

【参考】 你真的理解 Spring Boot 项目中的 parent 吗? 不使用 parent 方式创建SpringBoot项目篇 spring boot 项目不使用 spring-boot-starter-parent 构建,使用自己项目的parent构造

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档