09-maven
一 传统项目在使用依赖时的弊端
- Maven是什么
Maven是一个项目管理工具
- 一键构建 -> 使用一个命令能实现项目的编译,测试,打包,安装和部署
- 依赖管理 -> 使用简单的方式管理项目中的jar
- 传统项目使用中的弊端
- Jar需要手动下载复制进项目
- 即使别的项目中出现的jar,也须要再复制一份拷贝到项目中,在磁盘上相同的jar重复 出现很多次
解决办法:
二 maven的依赖管理
注意: 在学习maven之前需要弄清楚一个名称 -> 依赖
举例说明: A类在运行过程中需要调用B类的成员,可以说A依赖于B
- 坐标的作用
- 仓库的概念
- Maven的仓库分为3种
- 本地仓库 - 安装在maven服务器所在的主机
- 中央仓库 - 官方提供的仓库
- 远程仓库 - 安装在局域网中其他主机
- 仓库的作用是管理jar
- 特殊的仓库 - 私服(中央仓库在国内的镜像仓库,容易访问)
- Maven的仓库分为3种
三 maven的下载和安装
- 下载
- Maven是apache的产品,所以从https://maven.apache.org下载
- 安装
因为下载的是zip格式的安装包,所以直接解压在一个没有中文和空格的路径下即可
- 测试是否安装成功
只需在cmd中进入安装目录下执行 mvn -v 显示版本号,下图所示就是安装成功
意: 如果运行命令提示不能识别的外部命令,表示没有配置Java_home环境变量,因为maven也是使用Java语言编写的
- 配置
- 修改本地仓库地址
Maven安装成功后,会自动创建本地仓库文件夹,但是我们一般使用自己的 仓库,所以需要通过配置文件修改
-
- 镜像仓库(私服)的指定
如果引用本地仓库没有的jar,默认会从中央仓库下载,但是中央仓库在国外,网
络条件不好,所以建议国内用户使用镜像仓库替代中央仓库
- Maven安装目录的分析
四 一键构建
Maven的一键构建指的是可以使用一个命令实现项目的编译,测试,打包,安装和部署
- Clean - 清理命令(清空target目录)
- Compile - 编译命令(编译主程序下的Java文件)
- Test - 测试命令(编译并运行test下的Java文件)
- Package - 打包命令(Java项目 - jar,web项目 - war)
- Install - 安装命令(将打包成果物jar/war安装到本地仓库)
- 注意
- 上面演示的命令是存在执行顺序的,需要按照顺序执行命令
按顺序执行命令是因为后面的命令需要使用前面命令的成果物
- 如果没有按照顺序执行,也不会出错,因为maven为了防止出错,会在执行后面命令之 前按照顺序把前面的命令执行一遍.
五 maven的生命周期
Maven项目是存在生命周期的,通过命令来体现生命周期
Maven的生命周期是由3套相互独立的生命周期组成
- Clean生命周期 - clean
- Default生命周期 - compile,test,package,install,deploy
- Site生命周期 - ......
六 maven项目的目录结构
七 使用idea的maven插件创建web项目并部署运行
- 工作中使用maven一般需要在idea中配合使用,很少单独使用maven,所以先配置idea 的maven插件
- 创建web工程
- 准备工作完成后,引入所需jar的坐标
由于引入jar需要使用坐标,如果不知道坐标如何编写,可以从maven的中央仓库进行查找
网址 --> https://mvnrepository.com/
<?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.bjpowernode</groupId>
<artifactId>maven_web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>maven_web Maven Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--servlet的jar-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--jsp的jar-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
</dependencies>
</project>
- 代码
@WebServlet(name = "app1",urlPatterns = "/app1")
public class App1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("app1 servlet doGet......");
// 转发访问hello.jsp
req.getRequestDispatcher("/hello.jsp").forward(req,resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>这是我的第一个maven项目</h2>
</body>
</html>
- 效果
八 使用maven的tomcat插件部署启动项目
<!--配置tomcat插件-->
<build>
<!--可以配置多个插件-->
<plugins>
<!--每个plugin都代表一个插件-->
<plugin>
<!--插件无需收动复制jar,只需通过坐标引用即可-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<!--tomcat服务器的配置信息-->
<configuration>
<!--启动端口号-->
<port>8080</port>
<!--项目的访问路径-->
<path>/maven_web</path>
<uriEncoding>UTF-8</uriEncoding>
<!--使用的web服务器名称-->
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
使用maven开发的时候,可以使用idea的方式启动项目,也可以使用maven的tomcat插件启动项目,在使用方式上有所区别
使用步骤:
- 在项目的pom.xml文件中配置tomcat插件
- 启动服务器
- 启动成功后,访问项目可能出现的问题