SpringBoot项目模块化开发-打包

标题为什么要进行模块化开发?

永远记住:技术是为业务服务的

模块化开发是为了更好的管理项目,管理代码。常见于大型项目,把不同的模块分离开,方便开发和管理。其本质上其实还是一个项目(非微服务的分布式),只不过是划分了模块,使其类似于分布式:多个项目组合在一起。

如何构建一个模块化的Springboot项目?

父项目

首先,创建一个项目,maven或者springboot项目,都一样。
然后,清空项目下的项目文件,只留下pom文件即可。如下:(我的项目有别的模块,target是跑过就生成的)
在这里插入图片描述
pom里面设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fang.study</groupId>
    <artifactId>lifetime-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

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

    <modules>
    		<!-- 这里是你的功能模块-->
<!--        <module>common</module>-->
<!--        <module>dao</module>-->
<!--        <module>sever</module>-->
<!--        <module>web01</module>-->
<!--        <module>web02</module>-->
<!--        <module>entrance</module>-->

        <module>dynamic-datasource01</module>
        <module>dynamic-datasource02-rwseparation</module>
        <module>thread_threadPool</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
    </properties>

	<!-- 定义所有子项目都会用到的包 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

<!--    <build>-->
<!--        <plugins>-->
<!--            <plugin>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--    </build>-->

</project>

然后就是子项目了

在父项目上右键新建Module,这样夫项目的<modules></modules>标签会自动加入子项目
项目结构:
在这里插入图片描述
是的,没有启动类,你没看错

pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
	
	<!-- 父项目引入 -->
    <parent>
        <artifactId>lifetime-study</artifactId>
        <groupId>com.fang.study</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.fang.modules</groupId>
    <artifactId>dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dao</name>
    <description>modules-dao</description>

    <dependencies>
<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>3.0.0</version>-->
<!--        </dependency>-->
    </dependencies>

</project>

所有的子项目模块目录结构都一样,pom文件对应的更改。

注意,子项目的包建议是一样的,我的是com.fang.modules,方便后面使用

如何使用

比方说,我子项目有一个叫web的,这个是所有接口的入口,所有的controller都在这个项目里面。
那么,controller是调用service的,我们需要在对应的pom文件里面引用service,如下:

<dependencies>
    <dependency>
        <groupId>com.fang.modules</groupId>
        <artifactId>sever</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
</dependencies>

如何测试使用?

我们注意到,所有的项目中都没有启动类,我的项目额外新建了一个子项目,作为启动项目,构建如其他子项目一样,但是有启动类
在这里插入图片描述
pom文件:一样

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>lifetime-study</artifactId>
        <groupId>com.fang.study</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.fang.modules</groupId>
    <artifactId>entrance</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>entrance</name>
    <description>modules-entrance</description>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.fang.modules</groupId>
            <artifactId>web01</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fang.modules</groupId>
            <artifactId>web02</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

dependencies需要引入web子项目,否则我们无法请求到接口

启动类也需要添加包扫描,否则一样无法请求到接口(原因是springboot没有扫描到你的controller,IOC容器便不存在接口,就报错了)

package com.fang.modules.entrance;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(value = {"com.fang.modules"})//多个可以写数组
public class EntranceApplication {

    public static void main(String[] args) {
        SpringApplication.run(EntranceApplication.class, args);
    }

}

到这里基本就完成构建了,自己写一点业务逻辑测试一下是否成功。


排坑:如果说有抽离一下底层的实体类作为公共包引入,可能有时候需要install一下


如何打包

打包要求所有需要打包的项目要有打包的插件

<build>
	<plugins>
	    <plugin>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-maven-plugin</artifactId>
	    </plugin>
	</plugins>
</build>

然后在入口文件配置启动类

 <build>
	 <plugins>
	     <plugin>
	         <groupId>org.springframework.boot</groupId>
	         <artifactId>spring-boot-maven-plugin</artifactId>
	         <configuration>
	             <mainClass>com.fang.modules.entrance.EntranceApplication</mainClass>
	         </configuration>
	     </plugin>
	 </plugins>
</build>

其他没有启动类的子项目也要配置:

<build>
	  <plugins>
	         <plugin>
	             <groupId>org.springframework.boot</groupId>
	             <artifactId>spring-boot-maven-plugin</artifactId>
	             <configuration>
	                 <skip>true</skip>
	             </configuration>
	         </plugin>
	     </plugins>
</build>

打包

顺序:

  1. 父项目先install一下,
  2. 从底层往上打包:如果有抽离的公共包,先打公共包,install
  3. dao层打包,install
  4. service打包,install
  5. web打包,install
  6. 入口文件:install,(package应该也行),最后找到.jar文件
  7. 测试即可

到此结束。

项目地址提供参考:gitee仓库
学习地址:B站直达(感谢分享)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值