目录
需要资料的可以关注私发,分享给你
1. Maven概述和作用
目标
-
为什么要使用maven
-
maven有什么作用
在没有使用maven之前
在开发过程中有很多痛苦的开发经历:
maven就是用来解决以上问题的:
1.包的管理和维护
2.统一的项目结
统一的项目生命周期
-
包依赖的问题:jar包一般都不是独立存在的,一般一些jar也会用到其他的jar。比如a.jar依赖于b.jar,而b.jar又依赖于c.jar。当你用到a.jar的时候,你需要把3个jar包都加载进来才可以使用。当项目中用到很多jar包的时候,我们很难判断缺少哪些jar包,只有在项目运行过程报错了才知道。
-
包版本冲突问题:项目中用到了a.jar,a.jar依赖于c.jar的1.5版本,然后我们把这2个jar拷贝到项目中。后来又用到了b.jar,但是b.jar又依赖于c.jar的1.0版本,此时你把b.jar和c.jar的1.0版本引进来了,会发现c.jar有2个版本,发生冲突了。这种情况你要着手去解决jar包冲突的问题,也是非常痛苦的。
-
包的管理不方便:当我们的项目比较大的时候,我们会将一个大的项目分成很多小的项目,每个小项目由几个开发者负责,然后每个小项目都需要把这些jar拷贝一份到自己的项目目录中。
-
项目开发结构不统一:maven可以让大家都按照某种规范采用同一种项目结构,这样岂不是很方便么?大家按照某种约定,项目使用同样的结构来创建。
-
项目的生命周期控制方式五花八门:开发者除了编码之外,大多数时间都是在编译、打包、发布到测试环境,多数时间都在重复着跑单元测试、编译、打包、发布的工作。在没有自动化编译的时候,每个过程都需要我们手动去操作。
2. Maven的安装
目标
下载和安装maven
配置环境变量
下载Maven
安装Maven
直接解压到任意目录,在预习资料中已经提供了安装包
1.不要有汉字的目录
2.不要有空格
3.目录层次不要太深
Maven目录介绍
目录名 | 功能说明 |
---|---|
bin | 可执行文件的目录,其中mvn.cmd这是它的启动命令 |
boot | 第三方的类加载器 |
conf | 配置文件所在的目录,其中settings.xml是它的核心配置文件 如果这个文件配置有错误,会导致maven项目有问题。 |
lib | maven所依赖的jar包和一些插件 |
配置环境变量
1) 我的电脑右键,选择属性
2) 左上角选择"高级系统设置"
3) 选择高级下面的"环境变量"的按钮
4) 添加Maven的主目录为你的安装目录,设置Maven的可执行文件访问路径为Maven主目录的bin目录下
MAVEN_HOME=e:\apache-maven-3.5.2
Path=%MAVEN_HOME%\bin
测试安装好的Maven
出现如下提示信息表示配置成功:
小结
maven的安装要配置哪2个环境变量
1. MAVEN_HOME=安装目录 2. Path=%MAVEN_HOME%\bin
3. Maven仓库的概念和配置(重点)
目录
什么是POM
三种仓库的特点
配置本地仓库
什么是POM
使用maven创建的项目,每个项目都有一个pom.xml配置文件,这是maven项目的配置文件。
POM的全称:Project Object Model 项目对象模型,按面向对象的思想来管理整个项目
在pom.xml文件中包含以下内容:
当前模块或项目的坐标
项目依赖了哪些jar包(常用)
-
项目使用了哪些插件等
Maven的仓库概念
项目所有的jar包都从仓库中去下载,仓库就是存放jar包的地方
仓库分类
本地仓库
相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在本地电脑上)。以后不需要从远程仓库去下载,先从本地仓库找,如果找不到才去远程仓库找。
远程仓库
中央仓库
仓库中的jar包由专业团队(maven团队)统一维护,有全球最完整,最通用的jar包。Central Repository:
私服
在公司内部架设jar包的私有服务器,中央仓库中存放的是通用的jar包。公司自己开发的jar包可以放在公司内部的私服中供企业内部使用,私服仓库中也包含了大量中央仓库的jar包。访问私服仓库比访问中央仓库速度更快,更稳定。
第三方公共库
由大型公司搭建的服务器供大家使用的jar包服务器,例如:阿里云仓库 仓库服务
访问仓库的过程
配置本地仓库(重点)
1) 将本地仓库文件夹中的repository.zip解压,可以放在任意的位置,这是老师提供的本地仓库。
e:\maven\repository
2) 配置本地仓库,修改maven的安装目录中conf/settings.xml文件,在53行配置本地仓库为上面的目录。
<localRepository>e:\maven\repository</localRepository>
3) 修改settings.xml文件,146行的下一级元素,指定中央仓库的镜像。这里使用的是阿里云的中央仓库,速度比官方的快很多。注:在mirrors下面
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
4) 修改maven使用JDK的版本,187行。如果不配置就需要在idea中配置。maven默认使用的是JDK1.5的版本,这里使用1.8的版本。注:在profiles下面
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
5) 保存文件
小结
-
有哪2种仓库
本地仓库 远程仓库:中央仓库,私服,第三方公共库(阿里云)
-
settings.xml中需要配置哪些内容?
1. 本地仓库的目录 2. 修改远程仓库的地址 3. 修改JDK版本为1.8
4. Maven的坐标(重点)
目标
坐标的作用
定义坐标有哪些元素
Maven坐标的概念
每个jar包在仓库中都有一个唯一标识,这就是坐标,由以下三个元素组成
坐标的元素定义
命名规范:
元素名称 | 说明 |
---|---|
groupId | 表示一级或多级目录 |
artifactId | 表示下一级目录 |
version | 表示下一级目录 |
坐标的示例
例如:要引入junit的jar包,只需要在pom.xml配置文件中配置引入junit的坐标即可:
可以通过官方的中央仓库地址:http://repo1.maven.org/maven2/
通过以上三层结构就可以在仓库里面定位到一个jar包,坐标的每个组成部分都对应仓库里面的一级目录结构。如果之前已经访问过,则在本地仓库中也可以找到。`
有一些groupId项目名字对应两级目录,而artifactId和version元素都对应一级目录
小结
定义坐标有哪几个元素
groupId:对应一级或多级(组织或公司名字)
artifactId:对应一级 (项目或模块名字)
version:对应一级 (版本号)
5. 演示:IDEA中配置Maven环境(重点)
目标
在idea中配置maven的环境
IDEA绑定本地Maven服务器
1) 选择File--> Settings (配置当前的项目) ,这个配置只影响当前项目。但以后新创建的工程还需要重新配置。
而选择File-->Other Settings (配置以后新创建的项目) ,则是影响以后新创建的项目。
2020版
2019版
2) 选择Build,Execution,Deployment-->Build Tools-->Maven
3) 配置以下三项信息:Maven的主目录,配置文件settings.xml和本地仓库repository目录
4) 选择Build,Execution,Deployment-->Build Tools -->Maven-->Runner,设置Maven启动虚拟机的选项:VMOption,设置所有资源先从本地仓库查找,如果本地仓库中没有才去互联网找。
-DarchetypeCatalog=internal
5) 可选,如果汉字没有乱码则不用设置,Maven控制台输出中文如果出现乱码,则进行如下设置。
VMoptions: -Dfile.encoding=GBK 或者 -Dfile.encoding=UTF-8
VMOptions配置多个参数需要使用空格隔开
小结
在idea中配置maven环境需要指定哪些选项?
-
指定安装目录
-
指定settings.xml
-
本地仓库位置
6. 使用Maven骨架创建JavaWeb工程
创建JavaWeb工程
1) 选择Maven骨架时,要选择maven-archetype-webapp,注:不要选成cocoon-22-archetype-webapp。
2) 将模块添加到哪个项目,指定其父模块,设置为none。指定项目的坐标。 (2020版)
3) 确认Web的骨架信息,检查是否正确
5) 默认骨架创建好的JavaWeb工程如下,选右边的Maven Projects中的刷新。
6) 左边的webapp图标上出现蓝色小点。表示这是Web页面的根目录,类似于以前的web目录。
Maven对JavaWeb工程目录结构的要求
手动完善JavaWeb的目录结构
1) 手动在main目录下创建java目录和resources,如图
2) 在src目录下,与main目录同级,创建test目录,并在test目录下创建java文件夹和resources,如图
3) 在右边的Maven Projects刷新,左边的工程各个文件夹的图标都发生变化
4) 最终目录结构,如图红色方框中的文件夹都是手动创建的。
小结
相对JavaSE结构,Web的结构只是在main目录下多了一个webapp目录。这个目录是放网页的地方。
7. 演示:使用插件来创建JavaWeb工程
目标
-
插件的安装
-
使用插件创建Web工程
默认创建结构
需要将一个Java工程转成Web工程
idea插件安装
-
打开idea开发工具,如图安装插件
2.选中插件的zip包文件,注:不要解压缩
3.安装好以后,会提示重启idea开发工具
4.重启以后就安装好了
创建Web项目
-
创建maven模块
-
创建工程坐标,注:Location的位置,不要创建到了上一个模块的下面。注:以下截图是2020版的。
-
创建出来的是一个普通的工程,不是一个web项目
-
使用插件把普通的Java工程转换为web项目
-
出现如下中文提示
-
转换后的项目如下图,webapp下放网页和JS等静态内容。如果webapp上没有蓝色小点,就点右边的刷新按钮
8. 创建Servlet并部署运行
目标
创建Servlet并且运行
步骤
1) 打包的类型已经自动设置成了war
<packaging>war</packaging>
2) 在pom.xml加入依赖Servlet的依赖,artifactId设置为javax.servlet-api,选择3.1.0的版本,指定scope为provided
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--当前模块的坐标-->
<groupId>com.itheima</groupId>
<artifactId>day35_01_Web</artifactId>
<version>1.0-SNAPSHOT</version>
<!--
打包类型:
1. war web工程打包格式
2. jar java工程打包格式
-->
<packaging>war</packaging>
<!--所有依赖包,写在dependencies-->
<dependencies>
<!--每个依赖包写在dependency-->
<dependency>
<!--servlet坐标-->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--依赖范围-->
<scope>provided</scope>
</dependency>
</dependencies>
</project>
3) 刷新maven project窗口,导入Servlet 3.1.0的依赖包。
4) 如果没有导入jar包,可以在事件日志中设置为自动导入
5) 创建Servlet,注:要勾选使用注解的方式。
注:如果webapp文件夹上如果没有蓝色小点,则在上面右键是不能选择Servlet的。
目录结构
发布Web工程
1) 点上面的执行工具栏,编辑运行配置
2) 点Deployment,删除原有的项目,添加一个新的Artifact
3) 选择两个都可以,区别是:exploded是未打包成war的文件夹,访问速度更快一点,适合于开发阶段。
4) Application context的访问地址可以不变,设置成/
5) Server标签页的设置,这里默认的端口号是8080
6) 注意Tomcat默认访问的是index.jsp,要输入地址访问demo1
拓展:在线查询jar包依赖的写法
在maven中只需要导入依赖坐标,无需手动导入jar包就可以引入jar。在pom.xml中使用<dependency>标签引入依赖。如果pom模板中没有配置过的依赖,可以通过https://mvnrepository.com/在线搜索坐标写法。
1) 输入网址,在文本框中输入要查找的包名,如:servlet
2) 找到相应的结果,选择使用最多的
3) 点进去以后,选择相应的Servlet版本,如:3.1.0
4) 将相应的Maven依赖文本复制过来即可,只要点击文本就会自动复制,以后你按ctrl+v粘贴就可以了
注:以后开发项目,通常pom.xml中所有的依赖包的坐标都会提供。
9. Maven的生命周期:概述
目标
了解maven的生命周期
生命周期的概念和组成
maven对项目构建过程分为三套相互独立的生命周期
分别是:
-
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
-
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
-
Site Lifecycle 生成项目报告,站点,发布站点。
一个项目生命周期(Project Lifecycle)
使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命 周期,如下所示是生命周期的各阶段:
maven命令
maven通过执行一些简单命令即可实现上边生命周期的各个过程,比如执行mvn compile执行编译、执行mvn clean 执行清理。
10. 生命周期命令:clean、compile、test
以下所有的操作针对第1个通过向导创建的Web项目
clean命令
命令作用
清除target目录,target是字节码文件和项目发布的目录。用clean可以清除缓存。
也可以在命令行下执行:mvn clean
操作演示
1) 选择day39_02_Web项目,可以看到target文件夹
2) 双击右边的Maven Projects-->Lifecycle-->clean执行清除操作
3) 操作结果如下
4) 可以看到删除了target目录。
5) 也可以选择Execute Maven Goal选择clean命令执行,注意选择正确的路径。这种方式主要用于命令带参数的情况。
compile命令
命令作用
编译main目录,不会编译test目录
操作演示
1) 选择day39_02_Web项目,删除target中classes目录下和test-classes目录下所有的文件,不删除目录。
2) 双击compile命令执行
3) 在Run下查看结果
4) 只编译了java中的代码,test-classes中的代码没有编译。
test命令
命令作用
执行test目录下的测试类和方法
1. 需要导入Junit包
2. 汉字可能会有乱码,因为maven默认是使用GBK编码,如果有乱码不用理会。
3. 通常在junit中直接执行不会出现乱码
操作演示
1) 确认JUnit已经导入
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2) 在src/test/java下创建测试类AppTest
3) 执行test命令测试,双击或输入运行的test命令
4) 在Run查看测试结果
小结
-
clean:删除target目录
-
compile:编译main目录
-
test:执行test目录下所有的测试类和方法
11. 生命周期命令:package,install
目标
-
学习使用package和install命令
-
在命令行方式下使用生命周期的命令
package命令
命令作用
如果是java项目,打包成jar
如果是web项目,打包成war
将项目打包到target目录下
操作演示
1) 确认在Web项目中已经设置了打包的方式
<packaging>war</packaging>
2) 双击package或者输入命令执行
3) 在Run查看日志输出结果。注:每次打包前还会再次执行所有test命令
4) 在target或windows目录下都可以看到生成的war文件
install命令
命令作用
将工程安装到本地仓库
操作演示
1) 双击install或者输入命令,执行安装命令
2) 执行以后在Run窗口看到如下信息
3) 安装完毕后,在本地仓库中可以找到当前项目创建的war包信息
4) 可以将war复制到tomcat/webapps目录下
5) 通过浏览器访问
命令行下执行Maven命令
操作演示:
1) 打开命令提示符窗口
2) 运行命令之前,必须进入项目所在的根目录,可以看到pom.xml所在的目录
3) 执行Maven的清除命令:mvn clean\
4) 查看执行结果,发现target文件夹已经没有
小结:生命周期的命令
命令 | 说明 |
---|---|
mvn clean | 删除target目录 |
mvn compile | 编译main目录 |
mvn test | 执行test目录 |
mvn package | 打包到target目录下 |
mvn install | 安装到本地仓库中 |