项目架构
- 父工程:全局管理所有引入依赖的版本号。
- 父工程中配置版本号后,继承父工程的所有模块不需要再引入版本号。
- 公共模块:全局管理公共实体类,公共工具类,公共依赖。
- 公共模块中配置实体类,工具类后,依赖公共模块的所有模块可以直接导包使用。
- 公共模块中配置依赖,依赖公共模块的所有模块不需要再另外导入依赖。
- 服务:管理自己特有的依赖,实现相应的业务。
注意:
- 因为网关服务中不能引入web依赖,而其他服务可能都需要引入web依赖。所以web依赖一般还是放在公共模块中,但是网关服务就不会依赖公共模块,只继承父工程。
构建步骤
1. 构建工程文件夹
-
本地文件目录下创建工程文件夹
-
IDEA中选择 File --> Open 打开工程文件夹
2. 构建父工程
-
右击工程文件夹:New --> Module --> Maven --> Next(不需要选择
archetype
) -
配置模块参数
-
删除父工程中
src
目录 -
父工程的
pom.xml
文件模板<?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>org.aydenbryan</groupId> <artifactId>covid-19-data-platform-parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <!-- 继承父工程的所有模块,会自动添加 --> <modules> <module>covid-19-data-platform-common</module> <module>covid-19-data-platform-reptile</module> </modules> <!-- 继承Spring Boot父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <!-- 引入组件的版本号 --> <properties> <!-- 公共模块的版本号 --> <common.version>1.0-SNAPSHOT</common.version> <java.version>1.8</java.version> <spring.cloud.version>Hoxton.SR6</spring.cloud.version> </properties> <!-- 引入组件的声明 --> <dependencyManagement> <dependencies> <!-- 公共模块声明 --> <dependency> <groupId>org.aydenbryan</groupId> <artifactId>covid-19-data-platform-common</artifactId> <version>${common.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
注意:
- dependencies和dependencyManagement区别在于:
- 如果父工程使用dependencies来配置依赖的话,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承所有依赖项。
- 如果父工程使用dependencyManagement来配置依赖的话,起到了声明依赖的作用,并不实现引入。因此子项目需要单独配置需要使用到的依赖。
- dependencies和dependencyManagement区别在于:
3. 构建公共模块
-
右击工程文件夹:New --> Module --> Maven --> maven-archetype-quickstart --> Next
-
配置模块参数
注意:需要将公共模块继承父工程。
-
配置Maven路径
-
公共模块的
pom.xml
文件模板<?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"> <!-- 继承父工程 --> <parent> <groupId>org.aydenbryan</groupId> <artifactId>covid-19-data-platform-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>covid-19-data-platform-common</artifactId> <name>covid-19-data-platform-common</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- Maven自动重置JDK版本默认设置为1.8 --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!-- 配置公共依赖 --> <dependencies> </dependencies> </project>
-
删除公共模块中
test
目录和APP
类 -
添加
entity
,util
包
注意:
-
如果创建完模块之后,该模块的
pom.xml
为灰色且被横线划掉,解决方案为:取消选中即可 -
构建服务模块选
archetype
时,建议选择maven-archetype-quickstart
。选择maven-archetype-webapp
也可以,但是现在项目大部分都是前后端分离项目,后端服务不应该包含前端页面,所以选maven-archetype-webapp
没有什么意义。
4. 构建服务模块
-
创建服务模块的方式和创建公共模块的方式相同(见上方)
-
服务模块的
pom.xml
文件模板<?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"> <!-- 继承父工程 --> <parent> <groupId>org.aydenbryan</groupId> <artifactId>covid-19-data-platform-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>covid-19-data-platform-reptile</artifactId> <name>covid-19-data-platform-reptile</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!-- 配置服务独有的依赖 --> <dependencies> <!-- 每个服务必须依赖公共模块 --> <dependency> <groupId>org.aydenbryan</groupId> <artifactId>covid-19-data-platform-common</artifactId> </dependency> </dependencies> </project>
-
删除
APP
类和APPTest
类 -
创建服务模块入口类
@SpringBootApplication public class ReptileAppication { public static void main(String[] args) { SpringApplication.run(ReptlieApplication.class, args); } }
-
创建
resources
目录,并将其设置为Resources Root
-
在
resources
目录中创建application.yml
-
配置
application.yml
server: port: 9000 spring: application: name: reptile
注意:
- 每一个构建的服务模块都是没有Spring Boot的启动类的,所以我们需要自己写。
- 当运行两个或者两个以上模块的时候,IDEA就会自动调出Service Dashboard界面。