Maven项目管理工具
# Maven 项目管理工具
# 分模块开发与设计
# 工程模块与模块划分
在 maven 项目中,模块是指将一个大型项目拆分成多个独立的子项目,每个子项目都有自己的pom.xml
文件。这种模块化的划分可以带来许多好处,包括更好的代码组织、更容易的维护和测试、更好的团队
协作等。
在划分Maven项目模块时,可以根据功能、业务领域或技术层面进行划分。以下是一些常见的模块划分
方式:
- 功能划分:根据不同的功能将项目划分为多个模块,例如用户管理模块、订单管理模块、支付模块
等。这种划分方式可以使每个模块专注于特定的功能,便于团队成员的协作和独立开发。
- 业务领域划分:根据不同的业务领域将项目划分为多个模块,例如电商模块、金融模块、物流模块
等。这种划分方式可以使每个模块独立演化,便于团队成员的专注和理解。
- 技术层面划分:根据不同的技术层面将项目划分为多个模块,例如前端模块、后端模块、数据库模
块等。这种划分方式可以使每个模块专注于特定的技术领域,便于团队成员的专长发挥和独立开
发。
在划分模块时,需要考虑模块之间的依赖关系和版本管理。可以使用Maven的父子模块关系来管理模块
之间的依赖关系,并在父模块的pom.xml中定义共享的依赖和插件版本。这样可以确保模块之间的一致
性和版本控制。
# 聚合
# 作用
聚合用于快速构建 maven 工程, 一次性构建多个项目/模块
# 制作方式
创建一个父模块, 打包类型定义为 pom
定义当前模块进行构建操作时关联的其他模块名称
# 注意事项
参与聚合操作的模块最终执行顺序与模块间的依赖关系有关, 与配置顺序无关.
# 继承
# 描述
在Maven中,可以使用继承来实现项目之间的代码和配置的共享。Maven继承是通过在父项目中定义一
组通用的配置和依赖,然后在子项目中继承这些配置和依赖来实现的。
要使用Maven继承,需要创建一个父项目(也称为聚合项目)和一个或多个子项目。父项目中定义了一
些通用的配置,例如插件版本、依赖管理等。子项目可以继承父项目的配置,并可以添加自己的特定配
置。
在父项目的pom.xml文件中,使用元素列出所有的子项目。子项目的pom.xml文件中使用元素指定父项
目的坐标(groupId、artifactId和version)。
# 实现
父项目的pom.xml:
子项目的pom.xml:
<packaging>pom</packaging>
<modules>
<module>子模块的名称 1 </module>
<module>子模块的名称 2 </module>
<module>子模块的名称 3 </module>
<module>子模块的名称 4 </module>
</modules>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
<modules>
<module>child-project1</module>
<module>child-project2</module>
</modules>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#
</project>
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
2
3
4
5
6
# 继承依赖定义
# 描述
在Maven中,可以使用继承来定义依赖关系。通过在父项目的pom.xml文件中定义依赖,子项目可以继
承这些依赖,从而实现共享和统一管理。
在父项目的pom.xml文件中,使用元素来定义依赖管理。在该元素下,可以使用元素来列出所有需要管
理的依赖项。每个依赖项使用元素进行定义,包括groupId、artifactId和version等信息。
子项目可以通过在其pom.xml文件中使用元素来继承父项目的依赖。当子项目中引用一个依赖时,
Maven会首先查找子项目自身的依赖定义,如果找不到,则会继续查找父项目的依赖定义。
这种继承依赖定义的方式可以简化项目的管理,避免重复定义相同的依赖,并确保所有子项目使用相同
的依赖版本。同时,通过在父项目中集中管理依赖,可以更方便地进行版本升级和依赖冲突的解决。
# 案例展示
以下是一个示例的父项目pom.xml文件中的dependencyManagement定义:
子项目可以通过以下方式继承父项目的依赖:
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>child-project1</artifactId>
<version>1.0.0</version>
2
3
4
5
#
</project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>dependency1</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>dependency2</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 属性
# 自定义属性
# 作用
等同于定义变量, 方便统一维护.
# 定义格式
# 调用格式
# 内置属性
# 作用
使用 Maven 内置属性, 快速配置.
# 调用格式
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>dependency1</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>dependency2</artifactId>
</dependency>
</dependencies>
<properties>
<spring.version>5.1.9</spring.version>
</properties>
<dependency>
<version>${spring.version}</version>
</dependency>
${basedir}
${version}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Setting 属性
# 作用
使用 Maven 配置文件 setting.xml 中的标签属性, 用于动态配置.
# 调用格式
# Java 系统属性
# 作用
读取 Java 属性.
# 调用格式
# 系统属性查询方式
# 环境变量属性
# 作用
使用 Maven 配置文件 setting.xml 中的标签属性, 用于动态配置.
# 调用格式
# 环境变量属性查询方式
# 版本管理
# 简介
Maven是一个流行的构建工具,它提供了版本管理的功能。在Maven中,你可以使用版本号来管理你的
项目的不同版本。Maven的版本号遵循一定的规则,通常采用三段式的形式:
主版本号 : 表示项目重大架构的变更, 如: spring5相较于spring4的迭代
次版本号 : 表示有较大的功能增加和变化, 或者全面系统地修复漏洞
增量版本 : 表示有重大漏洞的修复
里程碑版本 : 表示一个版本的里程碑(版本内部)
例如,1.0.0是一个常见的版本号格式。在Maven中,你可以在项目的pom.xml文件中指定版本号。你
可以使用属性来定义版本号,以便在构建过程中灵活地修改它。
${setting.localRepository}
${user.home}
mvn help:system
${env.JAVA_HOME}
mvn help:system
2
3
4
5
# 工程版本
SNAPSHOT(快照版本)
项目开发过程中, 为了方便团队成员合作, 解决模块间相互依赖和时间啊更新的问题, 开发者对
每个模块进行构建的时候, 输出的临时性版本叫快照版本(测试阶段版本)
快照版本会随着开发的进展不断更新
RELEASE(发布版本)
项目开发到进入阶段里程碑后, 向团队外部发布较为稳定的版本, 和这个版本所对应的构建文
件是稳定的. 即便进行功能的后续开发, 也不会改变当前发布版本内容, 这种版本称之为发布版
本.
# 资源配置
# 多环境开发配置
# 配置方式
<profiles>
<!-- 定义具体环境:开发 -->
<profile>
<!--定义环境对应的唯一名称-->
<id>dev</id>
<!--设置默认启动-->
<activation>
<!--默认激活配置-->
<activeByDefault>true</activeByDefault>
</activation>
<!--定义环境中专用的属性值-->
<properties>
<!--当前环境-->
<profile.name>dev</profile.name>
</properties>
</profile>
<!-- 内网测试 -->
<profile>
<id>sit</id>
<properties>
<!--当前环境-->
<profile.name>sit</profile.name>
</properties>
</profile>
<!-- 生产 -->
<profile>
<id>prod</id>
<properties>
<!--当前环境-->
<profile.name>prod</profile.name>
</properties>
</profile>
</profiles>
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
# 加载指定环境
# 调用格式
# 范例
# 跳过测试
在Maven中,您可以使用-DskipTests参数来跳过测试阶段。当您运行Maven命令时,可以在命令行中
添加该参数,如下所示:
上述命令将执行Maven的clean和install目标,并跳过测试阶段。这意味着在构建过程中不会执行任何
测试。
另外,如果您只想跳过特定的测试类或测试方法,而不是完全跳过测试阶段,您可以使用maven-
surefire-plugin插件的skip或excludes配置。在项目的pom.xml文件中,您可以添加以下配置:
上述配置使maven-surefire-plugin插件跳过所有测试。如果您想要排除特定的测试类或测试方法,您
可以使用配置,并指定要排除的类或方法的全限定名。
# 私服
# Nexus
mvn 指令 -P 环境定义id
mvn install -P prod
mvn clean install -DskipTests
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
<!-- 或者使用以下配置来排除特定的测试类或测试方法 -->
<!--
<excludes>
<exclude>com.example.MyTest</exclude>
</excludes>
-->
<!-- 或者使用以下配置来包含特定的测试类或测试方法 -->
<!--
<includes>
<include>com.example.MyTest</include>
</includes>
-->
</configuration>
</plugin>
</plugins>
</build>
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
Nexus 是 Sonatype 公司的一款 maven 私服产品
下载地址: https://www.sonatype.com/download-oss-sonatype
# 仓库分类
1 )hosted:宿主仓库,即本地仓库,该仓库存放本地项目产生的构建,无论是团队内部开发了通用组
件库、公共 jar 等,都是发布到这里面。
2 )proxy:代理仓库,用来代理远程仓库,如代理 Maven 中央仓库等。
3 )group:仓库组,可以聚合上面两者。因为在开发过程中,某些包是远端的、某些包是内部私服中
的,这样就对应了两个地址,使用仓库组将 hosted 和 group 聚合,暴露为一个地址。
# 访问私服配置
配置当前项目访问私服上传资源的保存位置(pom.xml)
发布资源到私服命令
<distributionManagement>
<repository>
<id>test</id>
<url>https://localhost:8081</url>
</repository>
<snapshotRepository>
<id>snapshorts</id>
<url>https://localhost:8081</url>
</snapshotRepository>
</distributionManagement>
mvn deploy
2
3
4
5
6
7
8
9
10
11