Maven
Maven是什么
Maven是一个免费、开源的,用Java编写的项目构建和依赖管理工具。
Maven的特点
- 默认的目录结构
- 第三方依赖管理
通过配置pom.xml
文件,从远程仓库下载相关Jar包。解决了依赖维护问题。 - 提供了一致的项目构建管理方式
生命周期。减少了构建工作量。 - 插件式架构,大量的可重用插件
- 方便地集成于IDE
MAVEN的安装及配置
官网下载压缩包,解压到合适文件目录下。
配置环境变量 - 系统变量
M2_HOME = 文件目录
- 添加
%M2_HOME%/bin
到Path
配置maven的阿里云镜像
配置方式见阿里云仓库服务,修改maven配置文件
conf\settings.xml
即可1
2
3
4
5
6<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>建立本地仓库
本地仓库也是在
conf\settings.xml
中配置,默认地址为${user.home}/.m2/repository
1
2
3
4
5
6<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
基本操作命令
命令 | 作用 |
---|---|
mvn archetype:generate |
使用模板生成项目 |
mvn compile |
编译源代码 |
mvn test |
单元测试 |
mvn package |
打包项目,Java项目→Jar;Web项目→War |
mvn deploy |
部署,把打包后的项目上传发布到远程仓库 |
mvn site |
生成项目相关的站点、在线文档 |
mvn clean |
清理,删除构建的Jar包、class文件等 |
mvn install |
把打包的目录拷到本地仓库 |
在IDEA中使用Maven
创建一个Maven项目
方式一:Create from archetype
是一种后续省心的创建方式。
创建后,目前默认产生的src/main/webapp/WEB-INF/web.xml
文件的内容比较老旧,如下:
1 |
|
需要更新为如下较新的版本:
1 |
|
另外,需要在src/main
目录下创建两个目录:java
和resources
。2021.3.2版本的IDEA在main目录上右键 - New - Directory,就会默认出现这两个目录名,选中创建即可。
方式二:不勾选Create from archetype
原生态一点,直接打包好的项目可能会缺少部分文件,需要手动添加才能保证项目的顺利运行。
创建完成后,右键项目文件夹 - Add Framwork Support…
勾选
Web Application
- Versions:4.0
-Create web.xml
- OK会在项目文件夹下,生成一个web文件夹
可以在
web/WEB-INF/web.xml
中看到[方式一](#方式一:Create from archetype)更新的内容。在
pom.xml
中添加了需要的依赖之后,需要手动添加依赖的jar包到WEB-INF/lib
文件夹下File - Project Structure - Project Settings - Artifacts - 选择目标web应用 - Output Layout - Avaliable Elements
可以看到项目,项目下是由依赖关系添加的Jar包:
双击这些Jar包,它们就会自动添加到左边的
WBE-INF/lib
目录下(首次添加时会自动创建lib目录),OK关闭窗口即可
只有这样,最后打包的项目中才有依赖的Jar包,项目才能正常运行。
选择自定义的maven配置文件
File - Settings - 搜索maven:
Maven home path
:选择使用的maven的路径Bundled(Maven 3)
是IDEA捆绑的Maven- 也可选择自己下载的Maven
User settings file
:用户配置文件IDEA默认的maven配置文件为
${user.home}/.m2/settings.xml
。上文MAVEN的安装及配置中提到的为了快速下载依赖而配置的maven的阿里云镜像想要继续生效,有3种方式:- 修改
${user.home}/.m2/settings.xml
(默认文件,是最省心的方式) - IDEA中修改maven配置文件的路径,更改为maven目录下的
conf\settings.xml
- 在便于管理的目录下,自定义一个maven配置的
xml
文件(私以为${user.home}/.m2/
目录下就很好)
- 修改
pom.xml
pom(project object model, 项目对象模型),是Maven的核心配置文件。
groupId
、artifactId
和version
构成项目的唯一标识(坐标),不能重复。
使用Maven管理依赖,出现依赖冲突是很常见的情况。当存在依赖冲突时,Maven选择依赖的原则:
最短路径原则
该图中,会选择路径最短的v1.0的M。
声明优先原则
如果两组依赖路径长度一致,在pom文件中排前面的会被使用。
在IDEA中,处理依赖冲突时,使用Maven Helper
插件能快速地解决冲突。安装该插件后,pom.xml
文件下方会出现一个Dependency Analyzer
页签,可以很直观地查看冲突。
发生冲突的依赖会展示在右侧,如果想定位到具体发生冲突的依赖,只要在对应的依赖上,右键选择Jump to Left Tree
,就能在左边展示的树状依赖中定位,确定需要排除的依赖。确定好需要移除的依赖,右键选择Exclude
就能排除不需要的依赖。
Maven的生命周期
maven有三套独立的生命周期
- clean(删除构建的Jar包、class文件等)
pre-clean → clean → post-clean - site(生成站点文档)
pre-site → site → post-site → site-deploy - default
- validate (验证项目是否正确,所需信息是否有缺失)
- process-resources(将资源文件复制到项目目录下,之后打包用)
- compile (编译源代码)
- test (单元测试)
- package (打包)
- install (把打包的项目拷到本地仓库下)
- deploy (把打包的项目上传到远程仓库)
Maven的问题
由于Maven的约定大于配置,可能会遇到配置文件无法导出或无法生效的问题。
解决方案:在<build>
中配置<resource>
节点,防止资源导出失败的问题。
1 | <build> |