What matters in life is not what happens to you but what you remember and how you remember it.
生命中真正重要的不是你遭遇了什么,而是你记住了哪些事,又是如何铭记的。
——马尔克斯《百年孤独》
1、引言
在最近的项目开发中,为了满足后期将项目改造成分布式项目,探索将传统的单一工程改造成使用IntelliJ IDEA基于Maven创建多模块项目的实际开发。
2、项目结构
最终工程结构如下图所示,聚合工程为base,base-common为通用的类module,base-core为核心业务module,base-web为控制层。
3、创建过程
3.1 创建聚合工程base
(1)通过idea的Spring Initializr快速创建一个maven工程,并删除无关的文件,只保留pom.xml文件:
(2)修改聚合工程base的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目说明:这里作为聚合工程的父工程,修改打包为pom聚合工程 -->
<groupId>cn.chunsoft</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>base</name>
<description>Demo project for Spring Boot</description>
<!-- 继承说明:这里继承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 模块说明:这里声明多个子模块 -->
<modules>
<module>base-common</module>
<module>base-core</module>
<module>base-web</module>
</modules>
<!-- 版本说明:这里统一管理依赖的版本号,为了各个子module依赖包的一致性,避免版本不一致导致冲突问题 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!--依赖说明:公共的maven库在这里添加,每个工程独有的maven包,在各个子工程添加,但是版本号都是在父工程统一配置-->
<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插件需要删除,否则可能会导致install失败-->
<!--<build>-->
<!--<plugins>-->
<!--<plugin>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
<!--</plugin>-->
<!--</plugins>-->
<!--</build>-->
</project>
3.2 创建子模块(module)
同样通过Spring Initializr创建子模块:
(1)创建base-common
对着父工程右键 - New - Module - > 输入 base-common
如图所示,根据工程通用需求新建了一些包目录:
- annotation:注解相关,例如免登录注解等;
- constants:常量相关;
- enums:枚举类型数据,尽量避免魔法值;
- exception:异常相关;
- utils:常用工具类;
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.chunsoft</groupId>
<artifactId>base-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base-common</name>
<description>Demo project for Spring Boot</description>
<!-- 继承说明:这里继承父工程聚合 -->
<parent>
<groupId>cn.chunsoft</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--依赖说明:公共的maven库在有的东西,这里就不需要添加,这里只添加在本module需要的依赖-->
</dependencies>
<!--这里maven插件需要删除,否则可能会导致install失败-->
<!--<build>-->
<!--<plugins>-->
<!--<plugin>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
<!--</plugin>-->
<!--</plugins>-->
<!--</build>-->
</project>
(2)创建base-core
对着父工程右键 - New - Module - > 输入 base-core
如图所示,根据工程通用需求新建了一些包目录:
- config:所有配置相关的类;
- filter:过滤器;
- interceptor:拦截器;
- mapper:mybatis生成的mapper文件目录;
- pojo:实体对象集合,包括DO,VO,DTO等数据模型;
- scheduler:调度器或定时任务;
- service:业务service层,包括接口与其实现,可以按业务继续分包;
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.chunsoft</groupId>
<artifactId>base-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base-core</name>
<description>Demo project for Spring Boot</description>
<!-- 继承说明:这里继承父工程聚合 -->
<parent>
<groupId>cn.chunsoft</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--依赖说明:公共的maven库在有的东西,这里就不需要添加,这里只添加在本module需要的依赖-->
</dependencies>
<!--这里maven插件需要删除,否则可能会导致install失败-->
<!--<build>-->
<!--<plugins>-->
<!--<plugin>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
<!--</plugin>-->
<!--</plugins>-->
<!--</build>-->
</project>
(3)创建base-web
对着父工程右键 - New - Module - > 输入 base-web
如图所示,根据工程通用需求新建了一些包目录:
- controller:控制层,可以按业务继续分包;
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.chunsoft</groupId>
<artifactId>base-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--这里根据打包的需求配置jar包还是war包-->
<packaging>jar</packaging>
<name>base-web</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>cn.chunsoft</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.chunsoft</groupId>
<artifactId>base-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.chunsoft</groupId>
<artifactId>base-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--打包配置-->
<build>
<finalName>base</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>${springloaded.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
<!-- mvn spring-boot:repackage -->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4、打包发布
在 maven project侧边栏中,先点击base项目的clean,然后点击package或install进行打包;
如果觉得结构上存在问题欢迎大家一起讨论。