一、Maven简介
maven:是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的
依赖管理:就是对jar包的统一管理 可以节省空间
项目一键构建:mvn tomcat:run
该代码可以将一个完整的项目运行起来,实现编码 编译 测试(junit) 运行 打包 部署。
好处:
①节省空间,对jar包进行了统一管理,依赖管理
②一键构造
③可跨平台
④应用在大型项目可提高开发效率
二、Maven环境变量配置:
1,我的电脑—>右击属性
2,找到高级系统设置
3,点击 环境变量
4,新建 系统变量
6,需要填的内容为(直接复制粘贴即可,第二个变量值以maven的具体路径为主):
MAVEN_HOME
E:\maven\apache-maven-3.3.9
maven的具体路径如题所示,到bin这层即可。
8,找到Path–>编辑–>在最后面加入下面内容,记得前后都有;
隔开、最后点击确定即可。
;%MAVEN_HOME%\bin;
9,检验,win+R—>cmd—>mvn -v
若出现以下信息表示安装成功。
三、引入仓库(若没有,则输入命令的时候需要从互联网上下载,比较麻烦,慢)
maven有三种仓库:
本地仓库(自己维护)、远程仓库(公司维护)、中央仓库(maven团队维护)。
本地仓库的配置只需要修改setting.xml文件即可
将已下载好的东西放到如下位置,该文件里面有所有maven所需要用到的东西
找到maven–>conf–>setting.xml文件
需要找到该仓库的位置
找到setting.xml文件,更改需要查找配置文件的位置,保存一下即可
运行一个简单的java文件试验一下:
输入命令:mvn tomcat:run
出现以下信息表示运行成功
四、maven的目录结构
其中pom.xml文件是整个maven项目的核心文件
而setting.xml文件是maven软件的核心文件
五、maven命令的生命周期
1,maven常用命令:
初始maven文件
①mvn tomcat:run 运行maven项目,一键启动
会生成一个target文件夹,该文件夹就是所谓编译之后的文件
运行之后结果如下:
② mvn clean 清理编译文件
即,将target文件夹给清除掉
运行结果如下:
③mvn compile 编译主目录src下的java代码
也会生成target文件夹,但是该命令还会将主目录src下的java文件给编译生成.class
文件
④mvn test 编译并运行了test目录的代码
也会生成target文件夹,但是该命令还会将测试目录test下的java文件给编译生成.class
文件
⑤mvn package 打包
运行结果如下:
⑥mvn install 把项目发布到本地仓库中
即生成war包放到本地仓库中去
运行结果如图所示:
⑦mvn site 在target目录下,生成site文件夹,里面主要是静态页面
⑧mvn compile 把项目发布到私服上,让其他开发人员与项目共享
compile test package install deploy
例如:当执行test命令时,会自动将compile命令给执行
也就是执行后面的命令,前面的命令也就自动执行
这也就是maven的生命周期
maven的三个生命周期
clean生命周期(clean)
default生命周期(compile test package install)
site生命周期(site)
不同的生命周期的命令可以同时执行
例如:mvn clean package
六 、maven在eclipse中的一些配置
eclipse要用到MARS.2版本
M2e插件:但凡在eclipse上安装的插件都叫M2e插件
更换浏览视图
配置编码环境
①
②
maven插件的配置
①选择自己的maven软件版本3.3.9
②修改默认的本地仓库
创建索引(才能手动添加依赖)
打开maven仓库视图
重建索引,右击
如图所示,前面出现小三角表示重建索引成功
七、创建maven项目
①,新建maven项目
②,勾选该复选框,跳过骨架选择
③、创建maven工程
④、解决红色感叹号问题
⑤、(每次创建maven项目都需要自己手动创建)自己手动在src-main-webapp
下创建一个WEB-INF
文件夹,在该文件夹下随便添加一个web.xml
文件即可
⑥,处理编译版本
有图可知,该版本为1.5,但开发要用到1.8的版本
添加如下代码到pom.xml文件中,保存一下,即可看见版本变为1.8
<build><!-- 配置了很多插件 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version> <configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
此时仍会报错,这时需要更新一下maven项目
最后点一下OK即可
然后就会发现maven项目下红色感叹号消失了
八、在src/main/java文件夹下创建一个servlet
创建完servlet之后会发现有一大堆报错!!!
①、当创建servlet的时候,编译器会自动将web.xml
做一些修改,把头部信息,从而导致信息重复,去掉一个,保存一下即可。
删除代码:xmlns="http://java.sun.com/xml/ns/javaee"
②.
依赖传递:也就是当你添加一个依赖的时候,若该依赖依赖其他jar包,添加该依赖的时候会直接添加其所依赖的所有的依赖jar包。
方法一:自动添加依赖:
servlet没有导包,需要推荐依赖(jsp所需的一些api)
在pom.xml
下添加如下代码即可
<!-- 添加servlet-api,jsp-api --><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies>
同时编译器会自动从本地仓库导入相关jar包
方法二:手动添加依赖
①添加jsp依赖
拓展:可知有五个Scope,也就是依赖范围!!!详细介绍往后翻阅拓展部分
jsp依赖添加成功观察pom.xml上生成一些代码,也就是jsp-api的依赖
②添加servlet依赖
同样,添加依赖之后也会在pom.xml中自动生成一些依赖代码
③添加junit依赖
同样,pom.xml文件会多出一些依赖代码,但是这个比较特殊
九、在eclipse上运行maven项目
观察控制台
从web.xml上找到servlet的路径
访问即可
案例需求:整合struts2,页面上传一个客户id,跳转页面
①,需要跳转页面,做一个简单的jsp
需要依赖jsp-api、junit、servlet详细依赖配置向上翻阅
由于需要整合struts2,所以需要依赖struts2-core,同样的方法,添加依赖
②,在src/main/java文件夹下创建一个Class
package beyondsq;import com.opensymphony.xwork2.ActionSupport;public class CustomerAction extends ActionSupport {private Long custId;public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String findCustomerById(){System.out.println("前端正在登录的客户id为:"+ custId);return SUCCESS;}
}
③、由于需要页面的跳转,需要用到struts的核心配置文件,struts.xml
拷到src/main/resources
文件夹下
这里的配置文件有所限制,必须是.action
结尾的
struts.xml内容如下:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 配置常量 --><!-- 字符集 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 开发模式 --><constant name="struts.devMode" value="true"></constant><!-- 主题 --><constant name="struts.ui.theme" value="simple"></constant><!-- 扩展名 --><constant name="struts.action.extension" value="action"></constant><!-- 通用package --><package name="customer" namespace="/" extends="struts-default"><action name="findById" class="beyondsq.CustomerAction" method="findCustomerById"><result name="success">/sq.jsp</result></action></package>
</struts>
④、由于用到strut2,需要对web.xml配置过滤器
web.xml文件代码如下:<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>
⑤、由于使用tomcat:run运行的时候,是用tomcat容器运行该项目, 虽然maven就是一个插件,但是tomcat所需要的东西,maven插件里面都有。例如:tomcat里面的lib文件夹里面有jsp-api.jar、servlet-api.jar这两个jar包,而pom.xml里面就已经有这两个jar包了。因为这两个jar包冲突了,也不能把pom.xml里面的依赖给去掉,去掉之后web.xml就会报错,所有此时需要处理jar包冲突问题,此时就需要翻阅上文的拓展部分了,即Scope,依赖范围!!!!
⑥、然后再build运行一下maven
⑦、访问网址即可
其中custId可顺便填写
http://localhost:8080/maven-first/findById.action?custId=1014
拓展部分
有前面的Scope可知有五个范围,分别为:compile、provided、runtime、test
其中默认的依赖范围为compile,可以省略不写
上述案例需求可知,将jsp-api和servlet-api的Scope改为provided,它需要这两个jar包,但是tomcat里面本来就有,不需要从自己的maven仓库里使用,所以改成了provided,也就是使用的jar包是来自tomcat。当将maven项目打包(package)的时候,若是provided,则只会出现一个jsp和一个servlet有关jar包这两个包都是tomcat自带的。若是默认compile,则出现两个jsp和servlet包,一个来自tomcat一个来自自己的maven仓库。
test:只是针对junit来说的,若将junit的Scope改为test,则将maven项目打包的时候不会出现junit有关jar包
编译的时候,编译的是src/main/java里面的文件;而junit测试的时候,编译的时候src/test/java里面的文件,也就是junit测试都是写在src/test/java文件夹下的
①Scope为compile依赖时(默认依赖,拿Struts2-core),编译时需要,测试时需要,运行时需要(打包时需要有关jar包)
②Scope改为provided依赖时(拿jsp-api.jar、servlet-api.jar为例子),编译时(compile)需要用到有关jar包,测试时也需要用到有关jar包,
运行时不需要有关jar包(打包时不需要有关jar包)
③Scope改为runtime依赖时(拿j驱动包DBUtil为例子),编译时不需要,测试时需要,运行时需要(打包时需要有关jar包)
④Scope改为test依赖时(拿junit.jar包为例子,junit是开发人员来写的),编译时不需要,测试时需要,运行时不需要(打包时不需要有关jar包)
添加插件(插件也是一个依赖也是一个jar包)
①、更换tomcat端口和访问路径
在pom.xml下添加如下代码(端口:1014,访问路径:localhost:1014/sq/…):
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><port>1014</port><path>/sq</path></configuration>
</plugin>
②、更换tomcat7,此时运行的时候需要:tomcat7:run