1.什么是maven
Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
maven仓库分为本地仓库和中央仓库
通过maven可以把jar包下载到本地的好处就是,当编译时,会优先从本地的jar包去找,如果本地存在,就直接拿来用,如果不存在,就从Maven的中心仓库去下载。
第一次执行"mvn compile"和"mvn clean"这两个命令时,Maven会去中央仓库下载需要的jar包,而第二次执行这两个命令时,由于所需的jar包已经在本地的仓库中存储,所以就可以直接拿来用了,这样就省去了去中央仓库下载jar包的时间。所以通常刚开始用maven的时候第二次的时间会很快第一次很慢
2.pom.xml文件
pom.xml的基本信息(坐标)包括modelVersion、groupId、artifactId、version、packaging分别是maven模型的版本、组织的id、项目名称、项目的版本号、项目打包的类型
<?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.cheerful</groupId>
<artifactId>mybatis1</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
除此之外还有依赖,用于导入本地仓库的依赖管理jar包
dependency和dependencies,相当于import
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
properties:设置属性
build:maven在进行项目构建的配置信息,例如设置预编译的jdk版本号
3.maven的生命周期
生命周期:清理、编译、测试、打包、安装、部署
maven编译:
在pom.xml所在的目录打开命令提示符
mvn clean:清理原来编译的内容
mvn compile:编译主程序
mvn test-compile:编译测试程序
mvn package:打包成jar
4.使用模板创建Java SE Maven项目
在此之前我们需要先配置maven的本地仓库,如果不事先配置本地仓库的话,idea默认的仓库是在c盘的,file->settings,settings和othersettings两个地方都需要更改。
新建一个空的Java Se项目,然后new module创建模块是选择maven-archetype-quickstart,然后下一步的话,我当前用的是idea2019.1.3,然后这里输入你maven的坐标就好了,别的idea版本可能不一样,但是万变不离其中吧。
单击ok后会出现以下窗口
意思就是maven项目需要被导入,我们点后面那个auto自动导入。然后他就会自动导入资源
然后导入完成就会得到这样的一个目录结构,并且你的xml文件应该是有了很多插件和依赖。
5.Maven窗口的使用
在idea的右边有一个maven project的窗口,在Lifecycle里面有很多命令,也对应了maven生命周期里面的命令。例如clean == mvn clean , compile == mvn compile. dependencies下面存放当前maven的依赖。
6.maven创建web工程
选择maven-archetype-webapp然后一路next,finish
然后在pom.xml中可以引入servlet和jsp的依赖,写一个HelloServlet,然后在index.jsp里面写一个链接用到HelloServlet,运行服务器就能验证了
<!--添加servlet和jsp的依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
@WebServlet("、hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.println("Hello Maven");
writer.flush();
writer.close();
}
}
从地址栏的变化就可以知道我们这个web是部署成功辽。然后实际项目中可以从右边直接打包成war文件给用户。
7.依赖范围
依赖范围在pom.xml中用scope表示,scope的值有compile、test、provided
scope表示依赖使用的范围,也就是maven构建项目在哪些阶段起作用,默认compile
maven的创建有清理、编译、测试、打包、安装、部署。其中compile是全部、test仅测试、provided用于编译和测试