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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Character.UnicodeBlock of()方法与示例

Character.UnicodeBlock类的()方法 (Character.UnicodeBlock Class of() method) of() method is available in java.lang package. of()方法在java.lang包中可用。 of() method is used to return the Unicode block containing the given parameter value or it returns null…

simpleDBM的B-link树实现

参考的是VLDB2005的这篇论文&#xff0c;做个标记把。/Files/YFYkuner/Concurrency_control_and_recovery_for_balanced_B-link_trees.pdf 转载于:https://www.cnblogs.com/YFYkuner/archive/2009/12/21/1629268.html

网站后台中对html标签的处理

最近做一个CMS&#xff0c;后台中需要使用在线编辑器对新闻进行编辑&#xff0c;然后发表。我用的在线编辑器是CKEditorCKFinder。也许是我为了让CKEditor更本地化吧&#xff0c;改了很多。后来发现在CKEditor中对文字设置字体、颜色、字号大小时文字的<span>标签会出现N…

Java Calendar getActualMaximum()方法与示例

日历类的getActualMaximum()方法 (Calendar Class getActualMaximum() method) getActualMaximum() method is available in java.util package. getActualMaximum()方法在java.util包中可用。 getActualMaximum() method is used to return the maximum value that the given …

软件研发人员考核的十项基本原则(转)

软件研发人员考核的十项基本原则 作者: 任甲林 来源: 万方数据 软件研发人员的考核一直是软件企业管理的难点笔者在长期的研发管理实践与咨询实践中总结了进行软件研发人员考核的一些基本原则。(1) 要体现公司的价值观公司的价值观体现了公司认可什么类型的人员&#xff1f;…

2012.7.24---C#(2)

学习过了C#的基本属性函数后&#xff0c;接下来的学习我觉得比较重要。C#是一种面向对象的语言&#xff0c;下面复习一下面向对象中的一些名词。 类&#xff1a;把一些系列东西&#xff0c;把他们的共同的属性和方法抽象出来&#xff0c;给他起一个名字就是XXX类。类中定义…

汇编语言-001(BYTE、DUP、WORD 、DWORD 、QWORD 、TBYTE 、REAL )

1 : 基础汇编语言展示 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov eax,5add eax,6INVOKE ExitProcess,0 main ENDP END main2:基础汇编语言展示增加变量的访问 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dw…

<各国地图轮廓app>技术支持

如在app使用过程中遇到任何问题&#xff0c;请与开发者联系caohechunhotmail.com

Java BigDecimal longValueExact()方法与示例

BigDecimal类longValueExact()方法 (BigDecimal Class longValueExact() method) longValueExact() method is available in java.math package. longValueExact()方法在java.math包中可用。 longValueExact() method is used to convert this BigDecimal to an exact long val…

c#中的多线程同步

在处理多线程同步问题的时候&#xff0c;我们一般有临界区&#xff0c;互斥量&#xff0c;信号量和消息机制等几种解决方案&#xff0c;在c#中可以非常方便的使用它们来实现进程的同步。下面我就常用的lock,Monitor和Mutex几种来说明如何实现进程的同步。 lock和Monitor依靠一种…

ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“

windows下&#xff1a; ffplay 提示"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can’t initialize audio client" 添加环境变量&#xff1a;SDL_AUDIODRIVERdirectsound

js 正则表达式,正整数

var ss "3.333";var type /^[0-9]*[1-9][0-9]*$/;var re new RegExp(type);alert(ss.match(re));if (ss.match(re) null) {alert("请输入大于零的整数!");return;} 转载于:https://www.cnblogs.com/lingxzg/archive/2012/08/02/2620543.html

java 根据类名示例化类_Java即时类| EpochSecond()方法的示例

java 根据类名示例化类EpochSecond()方法的即时类 (Instant Class ofEpochSecond() method) Syntax: 句法&#xff1a; public static Instant ofEpochSecond(long sec_val);public static Instant ofEpochSecond(long sec_val, long nanos_adjust);ofEpochSecond() method is…

java中Date()类型输入数据的处理

对于Date类型的数据&#xff0c;需要输入生日存入相应数据库中 private Date birthday;// 生日package com.pdsu.mybatis.pojo;import java.io.Serializable; import java.util.Date;public class User implements Serializable {/*** */private static final long serialVers…

(扩展)欧几里德快速幂

GCD模板 __int64 gcd(__int64 a,__int64 b) {return b0? a:gcd(b,a%b); } 欧几里德算法又称辗转相除法&#xff0c;用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理&#xff1a; gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质&#xff1a; gcd(a,…

汇编语言-002(.data、Equal、$、EQU 、MOV 、MOVSX、MOVZX)

1&#xff1a;变量相加程序 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data firstval DWORD 20002000h secondval DWORD 11111111h thirdval DWORD 22222222h sum DWORD 0.code main PROCmov eax,firstvaladd eax,secondvaladd eax,thirdvalm…

\r与\n的区别,\r\n与\n或\r的区别(C语言/C#)

本文出处http://topic.csdn.net/t/20020718/07/882679.html 原作者:triout&#xff08;笨牛&#xff09; \r表示回车&#xff0c;\n表示换行&#xff0c;我们按回车按钮的时候&#xff0c;系统自动产生回车和换行两个字符&#xff1a; 回车仅仅是表示完成&#xff0c;把光…

通过ID查询一个用户的两种开发方法

通过ID查询一个用户的两种开发方法 数据库建表sql语句如下&#xff1a;https://github.com/beyondyanyu/Sayingyy/blob/master/JDBC2-数据库sql建表语句 ①&#xff0c;原始Dao开发&#xff1a; UserDao.java&#xff08;接口&#xff09;: package com.pdsu.mybatis.dao;i…

duration java_Java Duration类| minusMinutes()方法与示例

duration java持续时间类minusMinutes()方法 (Duration Class minusMinutes() method) minusMinutes() method is available in java.time package. minusMinutes()方法在java.time包中可用。 minusMinutes() method is used to subtract the given duration in minutes from t…

Silverlight + WCF异步调用 例子

看大家好像对我的NParsing框架不是很感兴趣&#xff08;写NParsing帖没人顶我&#xff09;&#xff0c;那就给大家来点“甜品”&#xff0c;换换口谓。来说说Silverlight方面的东西。 在Silverlight中数据通信只能用异步。有人会觉得写起来很麻烦&#xff0c;其实不然。也有很简…