文章目录
前面学习中,我们已经学习过 Maven 的入门知识,现在我们学习一些 Maven 的进阶知识。
下面是 Maven 进阶学习的目录:
🚀 一、 分模块开发与设计
分模块开发的意义:
- 将原始模块按功能拆分成若干个子模块,方便模块之间的相互调用,接口共享。
-
创建对应 Maven 模块。
-
书写模块代码。
分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,再进行拆分。
-
通过 maven 指令安装模块到本地 maven 仓库。(install 指令)
团队内部开发需要发布模块功能到团队内部可共享的仓库中。
-
在需要用到对应模块的工程的 pom 文件中添加该模块的依赖。
🚀 二、 依赖管理
🌟 2.1 什么是依赖?
依赖指当前项目运行所需要的 jar 包,一个项目可以设置多个依赖。
<!-- 格式: -->
<dependency>
<!-- 依赖所属群组 id -->
<groupId>org.springframework</groupId>
<!-- 依赖所属项目 id -->
<artifactId>spring-webmvc</artifactId>
<!-- 依赖版本号 -->
<version>5.2.10.RELEASE</version>
</dependency>
一个项目运行需要多个依赖:
🌟 2.2 依赖传递
依赖具有传递性:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。
2.1.1 依赖冲突现象
🌟 2.3 可选依赖 和 排除依赖
2.3.1 可选依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源不具有依赖传递性。-->
<optional>true<optional>
</dependency>
2.3.2 排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
<!-- 排除依赖 -->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
🚀 三、 继承与聚合
🌟 3.1 聚合
- 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合。
- 聚合工程:通常是一个不具有业务功能的 “空” 工程,
- 作用:使用聚合工程可以将多个工程进行编组,通过对聚合工程进行构建,实现对所包含模块进行同步构建。
- 当工程中某个模块发生更新时,必须保障工程中与已更新模块关联的模块同步更新,此时使用聚合工程解决批量工程同步构建的问题。
3.1.1 聚合工程步骤
- 创建 Mavne 模块,设置打包类型为 pom 。
<!-- 设置打包方式为 pom --> <packaging>pom</packaging>
- 设置当前聚合工程所包含的子模块名称。
<modules> <module>../maven_02_ssm</module> <module>../maven_03_pojo</module> <module>../maben_04_dao</module> </modules>
🌟 3.2 继承
提到继承大家都不陌生,java 中已经学习过继承,在 Maven 中同样也存在着继承机制。
继承描述的是两个工程之间的关系,与 Java 中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
- 简化配置。
- 减少版本冲突。
-
在聚合的基础上进行继承操作。
-
父工程的 pom 文件中配置依赖关系(子工程中将沿用夫工程的依赖关系)
-
配置子工程中可选的依赖关系。
<!-- 定义依赖管理--> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> </dependencies> </dependencyManagement>
该操作选中的依赖不要求子工程继承,子工程有需要可以在自己的配置文件中加上。(不需要配置依赖版本,自动使用父工程中的版本)
-
在子工程中配置当前工程继承的父工程。
<!-- 配置当前工程继承自 parent 工程 --> <parent> <groupId>com.it</groupId> <artifactId>maven_01_parent</artifactId> <version>1.0-SNAPSHOT</version> <!--填写父工程的 pom 文件--> <relativePath>../maven_01_parent/pom.xml</relativePath> </parent>
🌟 3.3 继承 和 聚合的区别
🚀 四、 属性
🌟 4.1 属性配置与使用
- 定义属性。
<properties> <spring.version>5.2.10.RELEASE</spring.version> <junit.version>4.12</junit.version> </properties>
- 引用属性。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency>
🌟 4.2 版本管理
🚀 五、 多环境配置与应用
🌟 5.1 多环境开发
maven 提供配置多种环境的设定,帮助开发者使用过程中快速切换环境。
- 定义多环境。
<profiles> <!-- 开发环境 --> <profile> <!-- 定义环境对应的唯一名称 --> <id>env_dep</id> <properties> <!-- 定义环境中专用的属性值 --> <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url> </properties> <!-- 设置是否默认启动 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 生产环境 --> <profile> <id>env_pro</id> <properties> <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url> </properties> </profile> <!-- 测试环境 --> <profile> <id>env_test</id> <properties> <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url> </properties> </profile> </profiles>
- 使用多环境(构建过程)
mvn 指令 -p 环境定义id mvn install -p pro_env
🌟 5.2 跳过测试
- maven 指令跳过测试。
mvn install -D skipTests
- pom 文件细粒度跳过测试。
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <!-- 设置跳过测试 --> <skipTests>true</skipTests> <excludes> <!-- 排除指定的测试用例--> <exclude>**/BookServiceTest.java</exclude> </excludes> </configuration> </plugin> </plugins>