修改时间:2021年2月5日
作者:pp_x
邮箱:[email protected]
Maven
Maven介绍
- Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的,可以使用maven对java项目进行构建、依赖管理。
Maven的作用
- 依赖管理
- 依赖指的就是是 我们项目中需要使用的第三方Jar包,,一个大一点的工程往往需要几十上百个Jar包,按照我们之前的方式,每使用一种Jar,就需要导入到工程中,还要解决各种Jar冲突的问题.
- Maven可以对Jar包进行统一的管理,包括快速引入Jar包,以及对使用的 Jar包进行统一的版本控制
- 一键构建项目
- 之前我们创建项目,需要确定项目的目录结构,比如
src
存放Java源码,resources
存放配置文件,还要配置环境比如JDK的版本
等等,如果有多个项目 那么就需要每次自己搞一套配置,十分麻烦 - Maven为我们提供了一个标准化的Java项目结构,我们可以通过Maven快速创建一个标准的Java项目.
- 之前我们创建项目,需要确定项目的目录结构,比如
Maven环境变量
- 类似Jdk环境变量配置
Maven仓库
- Maven中的仓库是用来存放maven构建的项目和各种依赖的(Jar包)。
Maven的仓库分类
- 本地仓库: 位于自己计算机中的仓库, 用来存储从远程仓库或中央仓库下载的插件和 jar 包
- 远程仓库: 需要联网才可以使用的仓库,阿里提供了一个免费的maven 远程仓库。
- 中央仓库: 在 maven 软件中内置一个远程仓库地址
http://repo1.maven.org/maven2
,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件
配置仓库
本地仓库配置
- maven仓库默认是在
C盘 账户目录 .m2
目录下,我们不要将仓库放在C盘,所以这里要重新配置一下 - 打开maven安装目录,进入conf文件下,找到
setting.xml
文件 - 找到如下位置进行本地仓库配置
远程仓库配置
- 以阿里云仓库为例
- 还是打开
setting.xml
文件,找到标签<mirrors></mirrors>
,将如下内容放入标签中
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>
http://maven.aliyun.com/nexus/content/groups/public/
</url>
<mirrorOf>central</mirrorOf>
</mirror>
idea和maven关联
打开IDEA 选择File --> Settings --> 搜素maven,就会看到如下界面
Maven的生命周期和常用命令
Maven的生命周期
- 使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些 过程规范为一个生命周期,如下所示是生命周期的各个阶段
Maven常用命令
mvn compile
:完成编译操作 , 执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。mvn clean
:执行完毕后,删除生成的target目录mvn test
:执行完毕后,会在target目录中生成surefire
、surefire-reports
(测试报告)、test-classes
(测试的字节码文件)mvn package
:完成打包操作, 执行完毕后,会在target目录中生成一个文件,该文件可能是 jar、warmvn install
:执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作 ,执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用
idea中Maven的工具栏
1.根据pom.xml文件重新导入所有Maven项目和依赖,刷新
2.创建源码(重新编译)并更新目录
3.下载源码或文档
4.添加Maven项目
5.执行生命周期中的阶段,选中lifecycle选项中生命周期中的一个阶段(phase),才能点击执行。
6.运行Maven生命周期或插件
7.切换离线模式,就是关闭和远程仓库的链接,从本地仓库中获取,也不能将jar包提交到远程仓库
8.是否跳过测试,点击选中就可以跳过测试,在点击选择取消跳过测试
9.展示当前选中的maven项目jar包的依赖,并且可以直接在图形化依赖图上进行排除依赖操作
10.收起下面展开的视图
11.跳转到maven的Setting页面
依赖范围介绍
依赖范围 | 说明 |
---|---|
compile | 编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。 |
provided | provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。 |
runtime | runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。 |
test | test 范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test范围依赖不会被打包。 |
system | system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。 |
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1.2</version>
<scope>provided</scope>
</dependency>