-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpom.xml
413 lines (384 loc) · 16.8 KB
/
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
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.z201.example</groupId>
<artifactId>example-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<url>https://z201.cn</url>
<name>example-parent</name>
<description>z201 example project</description>
<modules>
<module>Bom</module>
<module>Jmh-Snowflake</module>
<module>Junit</module>
<module>Selenium-Tool</module>
<module>Spring-Aop-Annotation</module>
<module>Spring-Programming-Model</module>
<module>Spring-SPI</module>
<module>Netty-Learning</module>
<module>SpringBoot-Distributed-Lock-Mysql</module>
<module>SpringBoot-Distributed-Lock-Redis</module>
<module>SpringBoot-Distributed-Lock-Zookeeper</module>
<module>SpringBoot-Distributed-Lock-Zookeeper-Curator</module>
<module>SpringBoot-Mybatis-Explain</module>
<module>SpringBoot-Mybatis-Snowflake</module>
<module>SpringBoot-Redis-Cache-Breakdown</module>
<module>SpringBoot-Redis-Geo</module>
<module>SpringBoot-Redis-Bloom</module>
<module>SpringBoot-Redis-Scan</module>
<module>SpringBoot-Redis-Delayed-Queue</module>
<module>SpringBoot-Redisson</module>
<module>SpringBoot-Dynamic-Data-Source</module>
<module>SpringBoot-Mysql-Redis</module>
<module>SpringBoot-Aop-Log</module>
<module>SpringBoot-Blocking-Queue</module>
<module>SpringBoot-Delayed-Message-Queue</module>
<module>SpringBoot-Email</module>
<module>SpringBoot-JMH</module>
<module>SpringBoot-Lucene</module>
<module>SpringBoot-Mdc-Log</module>
<module>SpringBoot-Mybatis-Audit</module>
<module>SpringBoot-Mybatis-Batch</module>
<module>SpringBoot-Scheduling-Tasks</module>
<module>SpringBoot-Test-Mock</module>
<module>SpringBoot-WebClient</module>
</modules>
<!-- 项目属性配置:定义项目中使用的各种属性值和版本号 -->
<properties>
<!-- Java相关配置 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 开发工具和框架版本配置 -->
<!-- Spring Boot版本 -->
<spring-boot.version>2.7.6</spring-boot.version>
<!-- Git提交信息插件版本 -->
<git.commit.plugin>4.9.9</git.commit.plugin>
<!-- Spring代码格式检查插件版本 -->
<spring.checkstyle.plugin>0.0.34</spring.checkstyle.plugin>
<!-- Maven编译插件版本 -->
<maven-compiler-plugin>3.8.1</maven-compiler-plugin>
<!-- Maven资源处理插件版本 -->
<maven-resources-plugin>3.1.0</maven-resources-plugin>
<!-- Maven单元测试插件版本 -->
<maven-surefire-plugin>3.5.2</maven-surefire-plugin>
<!-- Maven集成测试插件版本 -->
<maven-failsafe-plugin>3.5.2</maven-failsafe-plugin>
<!-- Lombok插件版本 -->
<lombok.version>1.18.24</lombok.version>
<!-- JaCoCo代码覆盖率分析工具版本 -->
<jacoco.version>0.8.8</jacoco.version>
<!-- 集成测试覆盖率代理配置 -->
<itCoverageAgent/>
</properties>
<!-- 其他仓库,按设定顺序进行查找. -->
<repositories>
<!-- 官方maven仓库 -->
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<!-- Spring 的maven仓库 -->
<repository>
<id>org.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>https://maven.springframework.org/milestone</url>
</repository>
<!-- 阿里云的maven仓库 -->
<repository>
<id>nexus-ali-yun</id>
<name>Nexus ali yun</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<!-- 腾讯云指定的仓库地址 -->
<repository>
<id>nexus-tencent-yun</id>
<name>Nexus tencent yun</name>
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</repository>
<!-- 华为云指定的仓库地址 -->
<repository>
<id>huawei-cloud</id>
<name>Nexus huawei cloud</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
</repositories>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.z201.example</groupId>
<artifactId>Bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- spring test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- test -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<!-- Mockito Core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<!-- Mockito inline -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建配置:用于定义项目构建过程中的各种配置和插件 -->
<build>
<pluginManagement>
<plugins>
<!-- Spring Boot Maven 插件:用于构建可执行的Spring Boot应用程序
- 创建可执行的jar/war包
- 提供开发时的热重载功能
- 集成Spring Boot的特性和依赖管理 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
<!-- Maven Resources 插件:用于处理项目资源文件
- 复制和过滤项目资源
- 处理资源文件的编码
- 支持资源文件的过滤替换 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin}</version>
</plugin>
<!-- Maven打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin}</version>
</plugin>
<!-- JaCoCo 插件:用于Java代码覆盖率分析-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- Maven Surefire 插件:用于执行单元测试
- 执行测试用例并生成报告
- 配置测试执行的JVM参数
- 支持测试用例的包含与排除
- 控制测试执行的并行度 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin}</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<skipTests>${skip.unit.test}</skipTests>
<includes>
<include>**/*UnitTest.java</include>
</includes>
<argLine>
-Xms512m -Xmx512m -Dfile.encoding=UTF-8 ${argLine}
</argLine>
</configuration>
</plugin>
<!-- Maven Failsafe 插件:专门用于执行集成测试
- 在集成测试阶段执行测试用例
- 支持与外部资源(数据库、网络服务等)的交互测试
- 确保多个组件或模块之间的协同工作
- 提供独立的测试生命周期 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<skipITs>${skip.integration.test}</skipITs>
<includes>
<include>**/*IntegrationTCase.java</include>
</includes>
<argLine>
-Xms512m -Xmx512m -Dfile.encoding=UTF-8 ${argLine}
</argLine>
</configuration>
</plugin>
<!-- JaCoCo 插件:用于Java代码覆盖率分析
- 收集单元测试和集成测试的覆盖率数据
- 生成详细的覆盖率报告
- 支持覆盖率数据的合并
- 可以设置覆盖率检查规则
主要参数说明:
- version: JaCoCo插件版本号,建议使用稳定版本
- executions: 定义插件执行的生命周期和目标
- prepare-agent: 准备JaCoCo运行时代理,用于收集覆盖率数据
- propertyName: 存储代理配置的属性名称,用于在其他插件中引用
- report: 生成覆盖率报告,支持HTML、XML、CSV等格式
- check: 检查覆盖率是否达到设定的阈值
使用场景:
1. 单元测试覆盖率分析
2. 集成测试覆盖率分析
3. 合并多个测试的覆盖率数据
4. 在CI/CD流程中进行质量门禁检查 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<!-- 单元测试执行前准备 -->
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
</executions>
</plugin>
<!-- Spring Java Format 插件:确保代码风格统一
- 强制执行Spring项目的代码格式规范
- 自动格式化Java源代码
- 确保团队代码风格的一致性 -->
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring.checkstyle.plugin}</version>
</plugin>
<!-- Git Commit ID 插件:将Git信息集成到构建过程
- 收集Git仓库的状态信息
- 生成包含Git信息的属性文件
- 支持构建版本追踪和问题排查
- 提供构建与源代码的关联 -->
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>${git.commit.plugin}</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<!--因为项目定制了jackson的日期时间序列化/反序列化格式,因此这里要进行配置,不然通过management.info.git.mode=full进行完整git信息监控时会存在问题-->
<dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
<includeOnlyProperties>
<includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
<includeOnlyProperty>^git.commit.(id|message|time).*$</includeOnlyProperty>
</includeOnlyProperties>
</configuration>
</plugin>
</plugins>
</build>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profiles.active>local</profiles.active>
<skip.unit.test>true</skip.unit.test>
<skip.integration.test>true</skip.integration.test>
<argLine>-Dspring.profiles.active=local</argLine>
</properties>
</profile>
<!-- 只运行单元测试的配置 -->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<skip.unit.test>false</skip.unit.test>
<skip.integration.test>true</skip.integration.test>
<argLine>-Dspring.profiles.active=dev</argLine>
</properties>
</profile>
<!-- 只运行集成测试的配置 -->
<profile>
<id>integration-test</id>
<properties>
<profiles.active>test</profiles.active>
<skip.unit.test>true</skip.unit.test>
<skip.integration.test>false</skip.integration.test>
<argLine>-Dspring.profiles.active=test</argLine>
</properties>
</profile>
<!-- 所有测试都运行的配置 -->
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<skip.unit.test>false</skip.unit.test>
<skip.integration.test>false</skip.integration.test>
<argLine>-Dspring.profiles.active=test</argLine>
</properties>
</profile>
<!-- 生产环境不执行测试 -->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<skip.unit.test>true</skip.unit.test>
<skip.integration.test>true</skip.integration.test>
<argLine>-Dspring.profiles.active=prod</argLine>
</properties>
</profile>
</profiles>
</project>