一、概述
Maven这个单词来自于意第绪语(犹太语),意为知识的积累.
Maven:
1.帮助我们管理jar依赖(依赖,jar版本的管理)
2.帮助我们构建工程(打jar,打war)
编译,测试,打包,部署
二、maven 安装
1、下载
https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
2、解压
3、配置环境变量
配置MAVEN_HOME
配置Path
测试maven
C:\Users\wgz>mvn -v
三、仓库
仓库:用来存储物品的地方
maven仓库:作用就是存储不同类型,不同版本的jar
本地仓库:就是jar 存储在本地磁盘
远程仓库:存储在其他服务器上
中央仓库:maven 的根仓库(公共的jar)
公共仓库:(镜像仓库): 镜像仓库就是国内 中央仓库的副 本,主要为了提高响应速度
私服:(私有的仓库服务器):公司内部共享的jar(不对外部开发), 解决外网无法访问问题,提高下载速度
本地仓库
中央仓库
存储了所有的公共的jar
https://mvnrepository.com/artifact/com.alibaba/druid
镜像仓库
为了提交响应速度,可以配置阿里云镜像
阿里云镜像
https://maven.aliyun.com/mvn/guide
网易云镜像
seetting.xml
在< mirrors>标签中配置:
<mirrors>
<mirror>
<id>aliyun</id>
<!-- 中心仓库的 mirror(镜像) -->
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
私服仓库
配置自己的私服地址
在servers 标签中配置
四、idea 中自带的maven
1,自己安装的 maven
2 两个idea 自带的maven
如果使用idea自带maven3 ,则配置的settings.xml 必须是maven3中的配置,否则配置的镜像仓库,无法生效
五、idea创建java 工程
六、如何引入依赖?
1、搜索
2、导入依赖
<!--
当前工程所有的依赖都应该放到 dependencise标签
<dependencies> 要放在坐标之后
-->
<dependencies>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
</dependency>
</dependencies>
七、常见bug
maven 由于网络原因(网速慢,掉线)引入下载jar失败
解决方案
1、 删除 lastUpdate
2、 重新导入依赖
3、假如导入之后依然无法导入,再次搜索lastupdate 又生成了,再次删除lastupdate 电脑切换为手机网络,再次尝试可能解决完了,jar包导入依然爆红,但是不影响使用,此时可以重启idea解决报红问题
八、idea 创建 web工程
1、创建工程
2、配置依赖
jsp.jar
servlet.jar
jstl.jar
<dependencies>
<!--
单元测试的包
-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<!-- jstl 支持 -->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--
servlet jar
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!--
jsp jar
-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
3、配置tomcat
4、创建 java resources 文件夹
5、创建servlet
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello world");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
6、测试
九、maven 打包类型
打包类型三种
war web 包
jar 普通jar 默认打包方式
pom 在父工程 配置打包类型为pom ,父工程在构建时,触发子工程构建
<!-- 打包类型 -->
<packaging>war</packaging>
<packaging>jar</packaging>
<packaging>pom</packaging>
十、依赖生命周期
依赖生命周期:jar包的存活时间,使用scope 标签配置
<scope>compile</scope>
标识 | 周期 |
---|---|
compile | 缺省值,适用于所有阶段(测试运行,编译,运行,打包) |
provided | 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于(测试运行,编译)阶段 |
runtime | 只在运行时使用,如 mysql的驱动jar,适用于(运行,测试运行)阶段 |
test | 只在测试时使用,适用于(编译,测试运行)阶段,如 junit.jar |
system | Maven不会在仓库中查找对应依赖,在本地磁盘目录中查找;适用于(编译,测试运行,运行)阶段 |
compile :全阶段都需要该jar
provided: 编译的时候,测试时候需要,运行时,打包时,不需要 servlet-api.jar
runtime:运行时,打包时,测试 需要,编译时不需要,mysql的驱动jar
test:测试时需要,运行时不需要,打包时不会打进去
<dependencies>
<!--
单元测试的包
-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 只有在测试时 需要,打包不会打入war-->
<scope>test</scope>
</dependency>
<dependency>
<!-- jstl 支持 -->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<!-- 任何阶段都需要jar-->
<scope>compile</scope>
</dependency>
<!--
servlet jar
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<!-- 编译时需要, 打包不会打进入war-->
<scope>provided</scope>
</dependency>
<!--
jsp jar
-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.22</version>
<!-- 运行时需要,编译可以没有,打包时,会打进入 war-->
<scope>runtime</scope>
</dependency>
</dependencies>
十一、maven 构建的生命周期
Maven 有以下三个标准的生命周期:
clean:项目清理的处理 ********
default(或 build):项目部署的处理 *****
site:项目站点文档创建的处理
1、clean
就是清空target目录
1.手动删除target
2.双击 idean 右侧面板 clean
3在命令行输入
mvn clean
2、default(或 build)
build构建 ----》生成jar
阶段 | 处理 | 描述 |
---|---|---|
验证 validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
编译 compile | 执行编译 | 源代码编译在此阶段完成 |
测试 Test | 测试 | 使用适当的单元测试框架(例如JUnit)运行测试。 |
包装 package | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
检查 verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
十二、单元测试
使用junit 完成单元测试
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* 使用junit 单元测试 使用Test开头
* 1.引入
* <dependency>
* <groupId>junit</groupId>
* <artifactId>junit</artifactId>
* <version>4.11</version>
*
* <!-- 只有在测试时 需要,打包不会打入war-->
* <scope>test</scope>
* </dependency>
* 2.在test 目录创建文件
* 3.写测试类
* 所有方法 必须 是 public void
*/
public class Test1 {
private String str = null;
@Before // 在 @Test 之前执行
public void init(){
str = "高原";
System.out.println("初始化资源");
}
@Test
public void hi(){
System.out.println(" hi-str:"+str);
}
@Test
public void say(){
System.out.println("say-str:"+str);
}
@After // 在 @Test 执行完毕后调用
public void destroy(){
System.out.println("释放资源");
}
}