为何需要MAVEN
使用maven前
项目臃肿不堪,jar包从各种渠道引入
使用maven后
项目从统一的规范下载,升级管理jar版本只需要修改配置文件
安装
配置环境变量
系统变量名 | 说明 | 实例值 |
---|---|---|
MAVEN_HOME | maven根目录 | C:\tool\apache-maven-3.3.9 |
Path | windows查找命令路径 | ;%MAVEN_HOME%\bin |
约定配置
##常用Maven目录结构
1 | src |
Maven POM
pom文件
1 | <project xmlns = "http://maven.apache.org/POM/4.0.0" |
node说明
节点 | 描述 |
---|---|
project | 工程的根标签。 |
modelVersion | 模型版本需要设置为 4.0。 |
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的 |
artifactId | 这是工程的标识。它通常是工程的名称。 |
version | 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。 |
Maven有哪些常用命令?都是什么作用?
Maven 构建生命周期
Clean(清理)
移除所有上一次构建生成的文件
Compile(编译)
编译项目的源代码。
Package(打包)
将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
Install(安装)
安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
Deploy(部署)
将最终的项目包复制到远程仓库中与其他开发者和项目共享。
设置JDK版本
方法一
1 | <properties> |
方法二
1 | <plugin> |
Maven 快照(SNAPSHOT)
1、Snapshot 版本代表不稳定、尚处于开发中的版本。
2、Release 版本则代表稳定的版本。
什么情况下该用 SNAPSHOT?
协同开发时
如果 A 依赖构件 B,由于 B 会更新,B 应该使用 SNAPSHOT 来标识自己。
这种做法的必要性可以反证如下:
a
如果 B 不用 SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用。
b
如果 B 不用 SNAPSHOT, 但一直使用一个单一的 Release 版本号,那当 B 更新后,A 可能并不会接受到更新。因为 A 所使用的 repository 一般不会频繁更新 release 版本的缓存(即本地 repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的 B
所有地方都用 SNAPSHOT 版本行不行?
不行。
正式环境中不得使用 snapshot 版本的库。 比如说,今天你依赖某个 snapshot 版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的 snapshot 库。你再次构建时,Maven 会去远程 repository 下载 snapshot 的最新版本,你构建时用的库就是新的 jar 文件了,这时正确性就很难保证了。