Maven详细教学

一、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-apiservlet-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

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond谚语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值