1. Maven简介
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
-
提供了一套标准化的项目结构
-
提供了一套标准化的构建流程(编译,测试,打包,发布……)
-
提供了一套依赖管理机制
Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
通过上面的描述大家只需要知道Maven是一个工具即可。Apache 是一个开源组织,将来我们会学习很多Apache提供的项目。
1.1 Maven模型
-
项目对象模型 (Project Object Model)
-
依赖管理模型(Dependency)
-
插件(Plugin)
1.2 仓库
大家想想这样的场景,我们创建Maven项目,在项目中使用坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地方呢?其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。
仓库分类
-
本地仓库:自己计算机上的一个目录
-
中央仓库:由Maven团队维护的全球唯一的仓库
-
远程仓库(私服):一般由公司团队搭建的私有仓库
今天我们只学习远程仓库的使用,并不会搭建。
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:
-
如果有,则在项目直接引用;
-
如果没有,则去中央仓库中下载对应的jar包到本地仓库。
如果还可以搭建远程仓库,将来jar包的查找顺序则变为:
本地仓库 --> 远程仓库--> 中央仓库
2. Maven安装配置
-
解压 apache-maven-x.x.x.rar 既安装完成
建议解压缩到没有中文、特殊字符的路径下。如课程中解压缩到 E
:\soft
下。
解压缩后的目录结构如下:
-
bin目录 : 存放的是可执行命令。mvn 命令重点关注。
-
conf目录 :存放Maven的配置文件。
settings.xml
配置文件后期需要修改。 -
lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。
2.1 新建本地仓库
在maven解压目录下新建文件夹,如“repository”,用来存储jar包 :
2.2 配置本地仓库
修改 conf/settings.xml 中的 <localRepository> 为一个指定目录作为本地仓库。
<localRepository>E:\soft\apache-maven-3.6.3\repository</localRepository>
2.3 配置系统环境变量
配置环境变量 MAVEN_HOME 为安装路径的bin目录
此电脑
右键 --> 高级系统设置
--> 高级
--> 环境变量
在系统变量处新建一个变量 MAVEN_HOME :
在 Path
中进行配置 :
打开命令提示符进行验证,出现如图所示表示安装成功:
2.4 配置阿里云私服
中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。
修改 conf/settings.xml 中的 <mirrors>标签,为其添加如下子标签:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3. Maven基本使用
3.1 Maven 常用命令
compile :编译
clean:清理
test:测试
package:打包
install:安装
3.2 Maven 生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven 对项目构建的生命周期划分为3套:
-
clean :清理工作。
-
default :核心工作,例如编译,测试,打包,安装等。
-
site : 产生报告,发布站点等。这套声明周期一般不会使用。
同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。
当我们执行 install
(安装)命令时,它会先执行 compile
命令,再执行 test
命令,再执行 package
命令,最后执行 install
命令。
当我们执行 package
(打包)命令时,它会先执行 compile
命令,再执行 test
命令,最后执行 package
命令。
默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的。
4. IDEA使用Maven
以后开发中我们肯定会在高级开发工具中使用Maven管理项目,而我们常用的高级开发工具是IDEA,所以接下来我们会讲解Maven在IDEA中的使用。
4.1 IDEA配置Maven环境
我们需要先在IDEA中配置Maven环境:
-
选择 IDEA中 File --> Settings
-
Build,Execution,Deployment --> Build Tools -->Maven
-
设置 IDEA 使用本地安装的 Maven,并修改配置文件路径
4.2 Maven 坐标详解
① 坐标
-
Maven 中的坐标是资源的唯一标识
-
使用坐标来定义项目或引入项目中需要的依赖
② Maven 坐标主要组成
-
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
-
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
-
version:定义当前项目版本号
如下图就是使用坐标表示一个项目:
注意:
上面所说的资源可以是插件、依赖、当前项目。
我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。
5. 创建Maven工程
5.1 创建Java项目
-
创建模块,选择Maven,点击Next
-
填写模块名称,坐标信息,点击finish,创建完成
5.2 导入Maven项目
-
选择右侧Maven面板,点击 + 号
-
选中对应项目的pom.xml文件,双击即可
如果右侧没有Maven面板:
打开View --> Appearance --> 勾中 Tool Window Bars
6. 配置(生命周期)运行环境
== 个人认为这最大用处就是项目一旦出现异常可以打断点使用DeBug调试 ==
点击Add Configurations(翻译:添加配置) --> 选择Maven
值得提一嘴的是,这里不同版本IDEA点开界面会有略微变化,但是万变不离其宗、大同小异了。下面是不同版本的截图。
IDEA 2021.3.3版本: 配置完成后: |
IDEA 2019.2.4版本: 配置完成后: |
下面是我翻译的配置参数,*通常为必填
* Name:名称(自定义)
- Parameters:参数 | General:常规 | Runner:运行中 | Logs:日志
* Working directory:工作目录
* Command line:命令行
Profiles(separated with space):配置文件(用空格分隔)
add prefix '-' to disable profile,e.g."-test":添加前缀'-'以禁用配置文件,例如:“-test”
Resolve Workspace artifacts:解决工作区工件
7. 配置 Maven-Helper 插件
-
选择 IDEA中 File --> Settings --> Plugins
-
搜索 Maven Helper,点击Install安装,弹出面板中点击Accept
-
重启 IDEA
安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:
8. 依赖管理
8.1 使用坐标引入jar包的步骤:
-
在项目的 pom.xml 中编写 <dependencies> 标签
-
在 <dependencies> 标签中 使用 <dependency> 引入坐标
-
定义坐标的 groupId,artifactId,version
<dependencies>
<!-- 导入mysql驱动jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--导入druid德鲁伊jar包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
</dependencies>
-
点击刷新按钮,使坐标生效
注意:
具体坐标可以到如下网站进行搜索
8.2 快捷方式导入jar包的坐标
每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式
-
在 pom.xml 中 按 alt + insert,选择 Dependency
-
在弹出的面板中搜索对应坐标(需要稍微等待几秒),然后双击选中对应坐标
-
点击刷新按钮,使坐标生效
8.3 自动导入设置
上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成
-
选择 IDEA中 File --> Settings --> Build,Execution,Deployment --> Build Tools
-
选择 Any changes,右下角点击 ok 即可生效
9. 依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。
如下图所示给 junit
依赖通过 scope
标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。
scope
所有取值:
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储在本地的jar包 |
-
compile :作用于编译环境、测试环境、运行环境。
-
test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
-
provided :作用于编译环境、测试环境。我们后面会学习
servlet-api
,在使用它时,必须将scope
设置为该值,不然运行时就会报错 -
runtime : 作用于测试环境、运行环境。jdbc驱动一般将
scope
设置为该值,当然不设置也没有任何问题
注意:
如果引入坐标不指定
scope
标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。
10. 创建Web项目
10.1 使用模板(骨架)创建
- 选择JDK版本
- 单击选中 org.apache.maven.archetypes:maven-archetype-webapp --> next下一步
这里和上面一样,填写后点击next -->
检查一下路径,如果默认没问题直接Finish -->
之后会自动加载一些配置文件,耐心等待几秒 -->
加载完毕:
创建好后的目录结构:
补全目录:
- 右键src--> New --> Directory --> IDEA自动检测到缺少的目录,把两个都添加上即可
- 右键main --> New --> Directory --> IDEA自动检测到缺少的目录,同样把两个都添加上
最终模块目录结构:
10.2 添加tomcat插件测试
10.2.1 配置pom.xml
① 这里暂时没有用的可以先删掉
② 酷站 Maven Repository(mvnrepository.com),搜索tomcat maven,找到org.apache.tomcat.maven
③ 找到 Apache Tomcat Maven Plugin :: Tomcat 7.x --> 点击 tomcat7-maven-plugin
④ 选择2.1版本
⑤ 单击选项框,复制代码
⑥ pom.xml中添加代码
<!--构建-->
<build>
<!-- 插件组 -->
<plugins>
<!--插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
⑦ 右侧Maven可以看到新增的tomcat7
⑧ 运行看结果
⑨ 进一步配置
<configuration>
<port>80</port>
<path>/</path>
</configuration>
效果如下: