创建springboot项目的两种方式

创建springboot项目的两种方式

一、第一种方式:springboot作为parent

我们一般情况下,创建一个单个的springboot项目时,在项目的pom.xml文件里,指定当前项目的parent为spring-boot-starter-parent即可,配置如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

这种方式是最常用的,也是用spring starter,不管是网页版,还是IDE里的项目向导默认的方式。

但是这种方式对于多模块项目存在一个严重问题:就是所有的子模块都必须是spring boot项目。

这是非常荒谬的设计。比如一个项目结构如下:

└── hefrpc
    ├── hefrpc-core
    ├── hefrpc-demo-api
    ├── hefrpc-demo-consumer
    ├── hefrpc-demo-provider
    └── pom.xml

实际上只有子项目hefrpc-demo-consumer和hefrpc-demo-provider需要是springboot项目,分别有一个HefrpcDemoConsumerApplication和HefrpcDemoProviderApplication作为启动类。其他项目没有,也不需要这个类。

其中hefrpc-core只需要依赖spring即可。hefrpc-demo-api只有接口描述,不需要任何依赖。

此时,如果hefrpc作为整个项目的根节点,如果引入了springboot作为parent,那么默认下面的这四个子项目都是springboot项目。从而导致整体无法使用mvc package打包运行。

那么这种情况下怎么办呢?

一个自然而然的想法是,hefrpc不去引入springboot作为parent,而是让hefrpc-demo-consumer和hefrpc-demo-provider引入springboot。这个想法非常正确,直接可以解决上面的问题。

但是问题是:使用什么姿势来引入呢?

如果还是用parent来引入,带来的问题就是,hefrpc-demo-项目的父pom不是hefrpc,而是springboot,这就某种意义上破坏了项目结构(虽然它也可以运行)。这时候怎么办呢?

好在springboot&maven提供了另外一种选项。

二、第二种方式:import 依赖管理方式

拿上面的例子来说,我们可以让hefrpc-demo-provider的parent是一个跟springboot无关的,hefrpc这个常规的pom,然后在hefrpc-demo-provider的pom.xml中增加如下配置,从而实现本项目也是一个springboot项目的功能。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.2.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

这段配置跟parent一样,把需要的springboot依赖都加了进来。

但是这么我们会发现,IDEA里KKrpcDemoApplication是可以编译运行的。

但是当我们用mvn package是无法编译运行的。打出来的jar也不是加入了所有依赖的fat jar。

三、问题1:无法正确打包

这是为什么呢?这是因为,import进来了依赖,但是打包编译的配置,build/plugin相关的东西没有搞进来。

所以需要添加如下配置来实现打包springboot项目。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这样maven运行时就知道使用spring boot的插件来打包,并做repackage处理,把依赖的jar都打到fat jar里去。

四、问题2:无法执行单元测试

这个时候虽然可以打包了,但是我们会发现mvn package时单元测试没有执行。提示没有找到测试类。

这个又是为什么呢?这是因为,缺少了执行单元测试的plugin配置,需要手工添加单元测试插件maven-surefire-plugin,以及对应于junit5的引擎surefire-junit-platform。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.2.3</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit-platform</artifactId>
                    <version>3.2.3</version>
                </dependency>
            </dependencies>
        </plugin>

如果使用的junit是4.x版本,需要这样配置:

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.2.3</version>
				<dependencies>
					<dependency>
						<groupId>org.apache.maven.surefire</groupId>
						<artifactId>surefire-junit4</artifactId>
						<version>3.2.3</version>
					</dependency>
				</dependencies>
			</plugin>

加上了上面的配置,就可以正确运行了。

相关推荐

  1. 创建springboot项目方式

    2024-03-30 23:04:01       19 阅读
  2. react-创建组件方式

    2024-03-30 23:04:01       13 阅读
  3. Springboot使用kafka方式

    2024-03-30 23:04:01       33 阅读
  4. 创建空List方法

    2024-03-30 23:04:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 23:04:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 23:04:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 23:04:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 23:04:01       20 阅读

热门阅读

  1. openGauss 客户端工具DataStudio

    2024-03-30 23:04:01       21 阅读
  2. leetcode283-Move Zeroes

    2024-03-30 23:04:01       18 阅读
  3. python——遍历网卡并禁用/启用

    2024-03-30 23:04:01       16 阅读
  4. 使用Python创建井字棋游戏

    2024-03-30 23:04:01       16 阅读
  5. 服务器大请求体问题定位

    2024-03-30 23:04:01       18 阅读
  6. 暴力枚举--选数

    2024-03-30 23:04:01       14 阅读
  7. 常用的 Git 命令

    2024-03-30 23:04:01       14 阅读
  8. ChatGPT指南:如何利用AI撰写优质学术论文

    2024-03-30 23:04:01       19 阅读
  9. IP地址的组成

    2024-03-30 23:04:01       17 阅读
  10. python习题小练习(挑战全对)

    2024-03-30 23:04:01       19 阅读
  11. darknet | darknet之nms do_nms_sort详解

    2024-03-30 23:04:01       22 阅读
  12. MyBatis 流式查询

    2024-03-30 23:04:01       18 阅读
  13. 智算AI平台介绍:初识volcano

    2024-03-30 23:04:01       20 阅读