Maven是一个项目管理工具,它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
Maven的核心思想:约定大于配置
Maven会规定如何去编写java代码(一些目录结构),必须要按照这个规范来。
传统的web项目中,我们引入的jar包是存放在lib目录。但是用Maven开发的项目,我们需要引入的jar包是存放在Maven的jar包仓库当中的。也就是说,我们用Maven开发项目时,不需要自己引入jar包,只要编写需要用的jar包所对应的坐标就好,使用的时候,Maven就会根据这个坐标找到仓库里面的jar包。
一个项目,一般都需要经历编译,测试,运行,打包,安装,部署等一系列的过程。那么构建是什么?就是这一系列的过程都交给Maven进行管理,这个过程称为构建。而一键构建,就是指整个构建过程,使用Maven一个命令就可以轻松完成。Maven构建的流程:
清理 -> 编译 -> 测试 -> 生成测试报告 -> 打包 -> 部署
以上全部可以通过一个Maven命令完成
Maven官网下载地址:https://maven.apache.org/download.cgi
解压之后的目录:
这个样子就是安装成功了。
-DarchetypeCatalog=internal
这个配置的作用:
每次创建新项目的时候,idea都需要用插件来进行创建,这些插件每次都会去中央仓库下载,这样创建就比较慢。这个配置就是让每次创建项目的时候,使用本地仓库中的插件进行创建项目。
Maven中的标准目录规范有以下几点:
Maven工程在工程内不会存放第三方jar包,这些第三方jar包都是通过坐标的方式去对应的jar包仓库里获取的。这个仓库的默认存储位置是:"C:\Users\Administrator.m2\repository"
修改这个默认目录:
<localRepository>E:\softdata\maven_resp</localRepository>
先打开cmd,进入模块的目录,比如:
上面这些命令,每一个命令都是有一个插件来支撑的,这个插件在首次使用的时候,maven会自动去中央仓库下载。
对maven项目的构建分为几个阶段,分别是:
对于上面的构建阶段,一般可以分为两个生命周期:
同样还是创建Maven工程
选择骨架:
记住选择的是maven-archetype-webapp
接着,填写坐标等信息,然后下一步
当idea上出现build success的时候,这个工程就已经创建好了。
这个时候会发现,创建的目录下只有src/main/webapp目录。那么如果想要写Java代码,就需要手动的补齐src/main/java目录
补齐了之后,在java目录下可能无法创建包和类,这个时候只要reimport一下就好了。
最后:可以发现的是,自己创建的目录结构其实和Maven标准的目录结构已经很接近了。并且没有引入一些不必要的东西,所以一般不用骨架创建项目也行。
创建一个servlet,获取从页面上提交的name数据,然后在jsp页面上显示。
在src下创建一个包,然后在包里创建一个servlet。但是这个时候会看到创建的servlet在报错。这个是因为创建的maven的web工程里面一个jar包也没有,包括servlet api 和jsp api 的jar包都没有。
引入servlet api 和jsp api 的jar包,可以在pom.xml中配置servlet api的坐标,这个坐标可以去一个外网上找到:https://mvnrepository.com/
<dependencies>
<!-- 引入servlet-api -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 引入jsp-api -->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
引入之后,reimport一下就不会报错了。
编写对应代码
配置Tomcat服务器,然后启动项目。
启动项目后,访问页面,发现EL表达式无法正常使用。这个时候加入以下代码:
<%@ page isELIgnored="false" %>
属性isELIgnored:是否忽略el表达式,默认是true忽略el表达式。将这个属性值设置为false,就可以使用el表达式了。
之前的项目,每次运行都要启动一下Tomcat,非常耗时间。使用Maven之后,可以用Maven的Tomcat插件来快速启动项目。
但是Tomcat的Maven插件现在只支持到7的版本,而7的版本不支持servlet api 4.X版本,所以如果要使用插件方式来启动Tomcat,只能使用3.X版本的servlet api。
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<plugins>
<plugin>
<!-- 引入Tomcat7 -->
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>90</port>
<path>/mavenWeb</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
现在,就不需要再配置Tomcat了。如果想要一次使用多个命令:
之前引入jsp api 和servlet api时,设置了一个属性:scope
<scope>provided</scope>
这个属性的作用是设置依赖的jar包的有效范围,具体取值如下:
原文:https://www.cnblogs.com/qmcl-biu/p/15198220.html