[关闭]
@wangzhuanyun 2020-09-27T03:39:27.000000Z 字数 4484 阅读 809

Maven构建多模块项目(六)

springboot


为什么要构建多模块项目

(1)不同方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现原因,即使定位到问题也很难修正问题,可能在修正问题的时候引入更多的问题。

(2)多方面的代码集中在一个整体结构中,新入的开发者很难对整体项目有直观的感受,增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构(通常在项目较大且开发时间较长时这是很难做到的)。

(3)开发者对自己或者他人负责的代码边界很模糊,这是复杂项目中最容易遇到的,导致的结果就是开发者很容易修改了他人负责的代码且代码负责人还不知道,责任追踪很麻烦。



将一个复杂项目拆分成多个模块是解决上述问题的一个重要方法,多模块的划分可以降低代码之间的耦合性(从类级别的耦合提升到jar包级别的耦合),每个模块都可以是自解释的(通过模块名或者模块文档),模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内容

模块划分与依赖关系

webservice业务层model实体类utils工具类dao持久层

dao层依赖model
service层依赖dao、model、utils
web层依赖service、model、utils
controller层依赖service、model

IDEA创建SpringBoot的多模块项目

建立父工程

(1)在IDEA工具栏选择File->New->Project
(2)选择Spring Initializr,默认选择Default,然后点击Next:

此处输入图片的描述

在输入框填写以下截图内容,点击Next
此处输入图片的描述

选择版本,直接点Next,无需选择
此处输入图片的描述

这时把没用的.mvn目录,src目录,mvnw还有mvnw.cmd都删除,最终只保留.gitignore和pom.xml,若是web项目,可在该pom.xml里添加以下依赖:

  1. <!--web特征-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>

最终项目结构为:
此处输入图片的描述

创建子模块

在父模块的根目录上点右键,在弹出的框里选择New->Module
此处输入图片的描述

选择Maven,点击Next
此处输入图片的描述

填写以下内容,点击Next
此处输入图片的描述

填写Module,点击Finish
此处输入图片的描述

同理添加boot-controller,boot-dao,boot-service,boot-view子模块

此处输入图片的描述

在boot-view中编写启动类与引入application.yml配置文件
此处输入图片的描述

  1. @SpringBootApplication(scanBasePackages = {
  2. "com.hz.controller",
  3. "com.hz.service"
  4. })
  5. @MapperScan("com.hz.dao") //扫描DAO 将数据源注入
  6. @EnableTransactionManagement //开启事务
  7. public class bootApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(bootApplication.class, args);
  10. }
  11. }

application.yml

  1. server:
  2. port: 80
  3. spring:
  4. datasource:
  5. username: root
  6. password: root
  7. url: jdbc:mysql://127.0.0.1:3308/smbms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
  8. driverClassName: com.mysql.jdbc.Driver
  9. resources:
  10. static-locations: classpath:/templates,classpath:/static/
  11. thymeleaf:
  12. suffix: .html
  13. prefix: classpath:/templates/
  14. encoding: utf-8
  15. cache: false #开发状态下不开启
  16. mybatis:
  17. mapper-locations: classpath:mapper/*.xml
  18. type-aliases-package: com.hz.pojo
  19. configuration:
  20. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在boot-dao中引用boot-common

  1. <dependency>
  2. <groupId>com.hz</groupId>
  3. <artifactId>boot-common</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

在boot-service中引入boot-dao,boot-common

  1. <dependency>
  2. <groupId>com.hz</groupId>
  3. <artifactId>boot-common</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.hz</groupId>
  8. <artifactId>boot-dao</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. </dependency>

在boot-controller中引入boot-service,boot-common

  1. <dependency>
  2. <groupId>com.hz</groupId>
  3. <artifactId>boot-common</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.hz</groupId>
  8. <artifactId>boot-service</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. </dependency>

在boot-view中引入boot-controller

  1. <dependency>
  2. <groupId>com.hz</groupId>
  3. <artifactId>boot-service</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

在父级pom.xml中设置编译器与启动类

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <!--启动类路径-->
  8. <mainClass>com.hz.bootApplication</mainClass>
  9. </configuration>
  10. </plugin>
  11. </plugins>
  12. </build>

注意:
父project的pom文件:不是jar,是pom
子project的pom文件:都是jar

启动项目访问模板下index.html,测试访问成功!!!!

maven执行命令 clean ,compile ,install ,package

打包上线问题

spring-boot工程打包编译时,会生成两种jar包,一种是普通的jar,另一种是可执行jar。默认情况下,这两种jar的名称相同,在不做配置的情况下,普通的jar先生成,可执行jar后生成,所以可执行jar会覆盖普通的jar

在pom打包处添加了configuration一项

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <!--启动类路径-->
  8. <mainClass>com.hz.bootApplication</mainClass>
  9. <classifier>exec</classifier>
  10. </configuration>
  11. </plugin>
  12. </plugins>
  13. </build>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注