学习资源
学习笔记
一、IDEA中使用Maven
0. 安装Maven
- 解压Maven压缩包到某路径(非中文路径)下
- 配置Maven的环境变量
- 在cmd命令行中输入
mvn -v测试是否安装并配置好了环境变量
1. 配置Maven
1.1 配置本地仓库
- 介绍
- Maven核心程序不包含具体功能,具体功能由插件完成。
- Maven 核心程序会到本地仓库中查找插件。
- 如果本地仓库中没有就会从远程中央仓库下载,如果不能联网就无法执行Maven的具体功能
- 为此可以将Maven的本地仓库指向联网情况下下载好的目录。
- Maven默认本地仓库为 ~/.m2/repository
setting.xml
<!-- localRepository| The path to the local repository maven will use to store artifacts.|| Default: ${user.home}/.m2/repository<localRepository>/path/to/local/repo</localRepository>--><localRepository>E:\document\repository</localRepository>
1.2 配置阿里云镜像
-
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>
IDEA配置
2. 创建Maven项目




3. 打包web程序
<build><finalName>maven-test</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.2</version><configuration><!--必须配置此,否则maven找不到web.xml文件位置--><webXml>WEB-INF\web.xml</webXml></configuration></plugin></plugins></build>
然后执行maven生命周期命令 package 即可在target文件夹内生成war包
二、Maven简介
1. 构建
- 清理
- 把之前编译的删除掉,为新编译做准备
- 编译
- 编译为class文件
- 测试
- 可批量执行测试代码
- 报告
- 生成测试结果的文件
- 打包
- 把所有class文件,配置文件等资源放入一个压缩文件中。通常java程序是 jar扩展名,对于web应用则是 war 扩展名
- 安装
- 把【打包】生成的jar、war安装到本机仓库
- 部署
- 把程序安装好可执行
2. maven核心概念
- POM
一个文件名为 pom.xml,翻译为 项目对象模型 控制maven构建项目的过程,管理jar依赖 - 约定的目录结构 maven项目目录和文件位置有规定
- 坐标 唯一字符串,表示资源的
- 依赖管理 管理 jar 文件
- 仓库管理 了解 存放资源位置
- 生命周期 了解 maven构建项目的过程
- 插件和目标 了解 执行maven构建的时候用的工具是插件
- 继承
- 聚合
三、核心概念
1. 约定目录结构
每一个maven项目都是以文件夹形式保存在磁盘上的
|---src| |---main # 主程序java代码和配置文件| | |---java # 程序包和java文件| | |---resource # 配置文件| |---test # 测试程序和文件(可以没有,非强制)| | |---java # 测试程序包和java文件| | |---resource # 测试程序配置文件|---pom.xml # maven核心文件(maven项目必须有)
>`` ``mvn compile 在根目录下生成 target 目录(结果目录),maven编译后的java程序,所有的class文件都存放在此。
2. pom文件
用于搜索的中央仓库:https://mvnrepository.com/
- modelVersion
- 模型版本,只能是4.0
- 坐标:唯一值,互联网中唯一标识一个项目
- groupId
- 组织id
- 一般是公司域名的倒写
- artifactId
- 项目名称,也是模块名称,对应groupId项目中子项目
- version
- 项目版本号,如果项目仍在开发中,不稳定版在版本后加 -SNAPSHOT
- 三位数字标识 3.3.3
- groupId
- packaging 项目打包类型,可以使用jar/war/rar/ear/pom,默认是jar,可以省略不写
- dependencies 依赖,项目使用各种资源说明
- properties 配置属性
- build 构建,构建相关配置
3. 仓库
- 仓库用来存放maven使用的jar和项目使用jar的地方
- 分类
- 本地仓库,个人计算机文件夹
- 远程仓库
- 中央仓库(权威)
- 中央仓库镜像(备份)
- 私服,公司内部局域网使用,不对外使用
- 仓库使用
- 不需要人为参与
- maven查看本地仓库—>私服—>镜像—>中央仓库
4. 生命周期
- 各个构建环节需要严格按照顺序执行,不能胡乱执行
- 各个周期具体操作由插件执行
- 无论执行生命周期哪个阶段的命令,都会使得生命周期从头开始执行
5. 常用命令
mvn clean清除target文件夹mvn compile编译主程序- 把 src/main/resources 文件内所有文件原封不动拷贝进 target/classes 文件夹内
- 把 src/main/java 内所有类编译为 class 文件放入 target/classes 文件夹内
mvn test-compile编译测试程序mvn test执行测试mvn package打包mvn install安装依赖mvn site生成站点
6. 插件
一些jar文件,真正完成maven的功能
7. 坐标
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
8. 依赖
8.1 依赖的范围
scope属性
| 属性 | 对主程序是否有效 | 对测试程序是否有效 | 是否参与打包 | 典型例子 |
|---|---|---|---|---|
| compile | ✔ | ✔ | ✔ | |
| test | ❌ | ✔ | ❌ | junit |
| provided | ✔ | ✔ | ❌ | servlet-api |


四、依赖管理
1. 依赖的传递性
- 非 compile 范围的依赖不可传递
1.1 直接依赖
直接引用的依赖
1.2 间接依赖
因为依赖的传递性,直接引用的依赖中引用的其他依赖称为间接依赖
2. 依赖的排除
2.1 设置需要排除依赖的场景
2.2 设置方式
<exclusions><exclusion><groupId /><artifactId /><version /></exclusion></exclusions>
3. 依赖的原则
解决模块工程之间jar包冲突
3.1 就近原则
3.2 先声明优先
4. 统一管理依赖的版本
- properties 标签统一声明版本号
- 需要统一版本位置,使用
$(自定义标签名)引用声明的版本号 ```xml4.12
<a name="IG9vm"></a>### 5. 继承- 统一管理各个模块工程中对junit依赖的版本- 将 junit 依赖统一提取到父工程中,在子工程声明依赖时不指定版本,以父工程中统一设定为准- 步骤- 创建一个maven工程作为父工程,打包的方式pom- 在子工程中声明对父工程的引用- 将子工程的坐标中域父工程坐标重复的内容删除- 父工程统一junit依赖- 子工程删除junit依赖的版本号。- 配置继承后,要先安装父工程<a name="ewfIp"></a>### 6. 聚合一键安装各个模块工程<br />配置:在一个‘总聚合工程’中配置各个参与聚合的模块```xml<!-- 配置聚合 --><modules><!-- 指定各个子工程的相对路径 --><module>../Hello</module><module>../HelloFriend</module><module>../MakeFriends</module></modules>
五、常用设置
1. 构建
<!-- 配置构建过程中需要使用的插件 --><plugins><plugin><!-- cargo 是专门从事启动servlet容器的组织 --><groupId>org.codehaus.cargo</groupId><artifactId>cargo-maven2-plugin</artifactId><version>1.2.3</version><!-- 针对此插件进行配置 --><configuration><!-- 配置当前系统中容器的配置 --><container><containerId>tomcat6x</containerId></container></configuration><!-- 配置插件在什么情况下执行 --><executions><execution><!-- 生命周期阶段 --><phase>install</phase><goals><!-- 插件目标 --><goal>run</goal></goals></execution></executions></plugin></plugins>


