概要:
- maven 基本概念
- maven 核心配置
一、maven 安装与核心概念
概要:
- maven 安装
- maven 编译(compile)
- 执行测试用例(test)
- maven 打包
- maven 依懒管理
1、安装
- 官网下载 Maven (https://maven.apache.org/)
- 解压指定目录
- 配置环境变量
- 检查安装是否成功 (mvn -version)
2、maven 编译
maven 编译过程演示
l 创建maven项目。
l 创建src 文件
l 编写 pom 文件
l 执行编译命令
请注意,在上述配置和命令当中,我们并没有指定源码文件在哪里?最后编译到哪里去?在这里
maven 采用了约定的方式从指项目结构中获取源码与资源文件进行编译打包。
- 主源码文件:${project}/src/main/java
- 主资源文件:${project}/src/main/resources
- 测试源码文件:${project}/src/test/java
- 测试资源文件:${project}/src/test/resources
3、Maven打包
maven 打包演示
#mvn 打包命令
mvn package
4、maven 单元测试演示
l 编写测试类
l 执行测试命令
执行完指令发现没有执行我们的测试方法,这是为何?原因在于maven 当中的测试类又做了约定,约定必须是Test开头的类名与test 开头的方法才会执行。
重新修改方法名后 在执行mvn test 即可正常执行。
通常测试我们是通过junit 来编译测试用例,这时就就需添加junit 的依赖。
5、maven 依赖管理
l 在pom 文件中添加junit 依赖
l 修改测试类,加入junit 代码
l 执行测试命令
提问:
在刚才的演示过程当中 ,junit jar包在哪里?是怎么加入到classPath 当中去的?maven 是在执行test 命令的时间 动态从本地仓库中去引入junit jar 包,如果找不到就会去远程仓库下载,然后在引入。
本地仓库位置:
本地仓库位置默认在 ~/.m2/respository 下
要修改 ${M2_HOME}/conf/settings.xml 来指定仓库目录
<!-- 指定本地仓库目录-->
<localRepository>G:\.m2\repository</localRepository>
二、maven核心配置
概要:
- 项目依懒(内部、外部)
- 项目聚合与继承
- 项目构建配置
项目依懒
项目依赖是指maven 通过依赖传播、依赖优先原则、可选依赖、排除依赖、依赖范围等特性来管理项目ClassPath。
1、依赖传播特性:
我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件遇到这种情况Maven会将依赖网络中的所有节点都会加入ClassPath当中,这就是Maven的依赖传播特性。
举例演示Spring MVC的依赖网络
<!-- 添加spring web mvc演示 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.10.RELEASE</version>
</dependency>
在刚刚的演示当中,项目直接依赖了spring-webmvc 叫直接依赖,而对commons-logging 依赖是通过webmvc传递的所以叫间接依赖。
2、依赖优先原则
基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本。
第一原则:最短路径优先。
第二原则:相同路径下配置在前的优先。
第一原则演示
<!-- 直接添加commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
上述例子中commons-logging 通过spring-webmvc 依赖了1.1.3,而项目中直接依赖了1.2,基于最短路径原则项目最终引入的是1.2 版本。
第二原则演示:
步骤:
- 添加一个新工程Project B
- 配置Project B 依赖 spring-web.3.2.9.RELEASE
- 当前工程直接依赖 Project B
配置完之后,当前工程 project A 有两条路径可以依赖 spring-web,选择哪一条 就取决于 对 webmvc 和 Project B的配置先后顺序。
Project A==> spring-webmvc.4.0.0.RELEASE ==> spring-web.4.0.0.RELEASE
Project A==> Project B 1.0.SNAPSHOT ==>spring-web.3.2.9.RELEASE
注意:在同一pom文件,第二原则不在适应。如下配置,最终引用的是1.2 版本,而不是配置在前面的1.1.1版本。
原文地址:https://www.cnblogs.com/MarlonKang/p/12356362.html