Maven是一个项目管理工具,它包含了这些逻辑:一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)。当你使用Maven的时候,你用一个明肯定义的项目对象模型来描述你的项目,而后Maven能够应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
java
Maven规范化构建流程:web
用 maven 对项目进行管理,能够帮咱们构建工程,管理jar包,编译代码,减少工程占用的空间,还能帮咱们自动运行单元测试,打包,生成报表,甚至部署项目等等apache
Maven依赖管理:windows
a.下载:api
Maven官网下载浏览器
b.安装:缓存
与普通软件同样,不要有特殊符号与空格tomcat
c.目录结构:jsp
maven 的目录结构:maven
bin:存放了 maven 的命令
boot:存放了一些 maven 自己的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 自己运行所需的一些 jar 包
至此咱们的 maven 软件就可使用了,固然了前提是你的电脑上以前已经安装并配置好了 JDK复制代码
a.配置MAVEN_HOME:
配置MAVEN_HOME,变量值就是你的 maven安装的路径(bin目录以前一级目录)
添加到Path路径
b.检查Maven是否配置成功:
打开 cmd ,输入 mvn -v 若出现 maven 的版本号,即安装成功
maven 的工做须要从仓库下载一些 jar 包,本地的项目都会经过 maven 软件从远程仓库(能够理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库就是本地文件夹,当第二次须要此 jar 包时则再也不从远程仓库下载,由于本地仓库已经有在了,能够将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
默认本地仓库位置在{user.din}/.m2/repository,{user.dir}表示 windows用户目录
若须要修改本地仓库位置,首先打开 conf 目录下的 settings.xml 文件,再找到
标签(大概在56行),而后把本身所配置的本地仓库目录填上去,如本人的本地仓库:
D:apache-maven-3.5.2maven_repository
配置完后,终于能够开始使用 maven 了!!!
进入一个 HelloWord 的 maven Web工程目录(当前目录有 pom. Xm文件),运行 mvn tomcat:run命令。而后根据提示打开浏览器输入资源地址(如:localhost:8080/hello_maven/),便可出现运行结果: Hello World。
mvn compile 是 maven 工程的编译命令,做用是将sr/main/ava下的文件编译为 class 文件输出到 target
目录下。复制代码
mvn test 是 maven 工程的测试命令,会执行 src/test/java下的单元测试类复制代码
mvn clean 是 maven 工程的清理命令,执行 clean 会删除 target目录及内容复制代码
mvn package是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包
复制代码
mvn install 是 maven 工程的安装命令,执行 instal 将 maven 打成 jar 包或 war 包发布到本地仓库复制代码
注:当后面的命令执行时,前面的操做过程也都会自动执行,
-> Create New Project
普通 Java 工程能够选择骨架: maven-archetype-quickstart
IDEA 第一次建立 maven 工程会下载许多依赖包,故时间会比较长
控制台出现 BUILD SUCCESS 则说明成功
手动添加 src/main/java 目录,以下图右键 man 文件夹 → New → Directory,2019 版 IDEA 的 新建 Maven 工程,增长了自动隐藏 Make Directory → Sources Root 的步骤,会有提示 java 做为自由根目录
src/main/java 建立了一个 Servlet,但报错
解决方案,就是要将 servlet-api-xxx.jar 包放进来,做为 maven 工程应当添加 servlet 的坐标,从而导入它的 jar
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>复制代码
坐标定义以下:
坐标来源:
添加依赖须要指定依赖 jar 包的坐标,可是不少状况咱们是不知道 jar 包的的坐标,能够经过以下两个网址查询:
http://search.mavenorg/http://mvnrepository.com
A依赖B,须要在A的 pomum文件中添加B的坐标,添加坐标时须要指定依赖范围,依赖范围包括:
compile:编译范围,指 A 在编译时依赖 B ,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,因为运行时须要因此编译范围的依赖会被打包。
provided: provided 依赖只有在当 JDk 或者一个容器己提供该依赖以后才使用, provided 依赖在编译和测试时须要,在运行时不须要,好比: servlet api 被 tomcat 容器提供。
runtime: runtime依赖在运行和测试系统的时候须要,但在编译的时候不须要。好比:jdbc的驱动包。因为运行时须要因此 runtime 范围的依赖会被打包
test:test范围依赖在编译和运行时都不须要,它们只有在测试编译和测试运行阶段可用好比:junt 因为运行时不须要因此 test 范围依赖不会被打包。
system: system 范围依赖与 provided相似,可是你必须显式的提供一个对于本地系统中JAR文件的路径,须要指定 systemPath 磁盘路径, system 依赖不推荐使用。
<scope> 依赖范围 </scope>复制代码
默认引入的 jar 包 -- compile【默认范围能够不写】(编译、测试、运行都有效)
servlet-api、jsp-api -- provided(编译、测试有效,运行时无效防止和 tomcat 下 jar 冲突)
jdbc 驱动 jar 包 -- runtime(测试、运行有效)
junit --- test(测试有效)
依赖范围由强到弱的顺序是: compile > provided > runtime > test复制代码
在项目中添加依赖范围:
package com.actadd.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName ServletDemo
* @Description 在 maven 工程中建立一个 ServletDemo
* @Author Actadd
* @Date 21:18 2019/12/15
* @Version 1.0
*/
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//跳到 hello.jsp 资源
req.getRequestDispatcher("/hello.jsp").forward(req, resp);
}
}
复制代码
pom.xml 中添加 tomcat 插件
接下来在运行按钮添加 tomcat 运行配置:
添加 tomcat
右键运行