文章结构
(本文使用win10)
Maven是什么;
怎么部署maven以及使用;
如何将原始web项目搭建在maven工程中;
对Maven的理解
(本文基于对maven主要功能的理解,并不全面)
在我们写一些基础的web项目的时候,我们需要导入tomcat包、mysql-connector-java包、serverlet包、beanutils包等等等各种jar包,而这可能只是实现了一个简单的用户登录界面。
那真的到实际应用的时候,每建新的一个项目,很多重复的jar包又要手动导一遍,还导成百上千个这也太过分了,一打包给别人,可能代码没占多少体积,jar包给塞满了。
这个时候!Maven出现了,它说这些导包的事情放着我来,你写代码就好了!这就是它的第一个核心功能:依赖管理,简单来说就是我们的项目是依赖jar包的,maven工程可以对jar包进行管理,且Maven开发的项目jar包是不会被打包的,节省了很多空间。
随后你开心地在写web项目的代码,半路突然发现你还要把你的项目打成war包,然后放到tomcat的root目录,要去bin目录下startup.sh启动tomcat,还得改一波web.xml??(虽然servlet3.0及以上版本支持注解就不用xml,idea运行tomcat也相对便捷一点)这个时候!Maven又来了,它说打包什么的放着我来!ok它的第二个核心功能:一键构建,简单的来说就是你点一点或者输入一行命令就能完成编译、测试、运行、打包、安装、部署等等等。
其实说到这里,差不多你对Maven有个大致的理解了,那我们把它的定义搬出来:Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
进一步了解Maven
知道了maven是什么,以及它的两个核心功能,那我们简单了解一下它如果不把jar包和项目一起打包又怎么知道去哪找jar包呢?来了来了Maven仓库带着jar包来了!
顾名思义,Maven仓库(Maven Repository)就是用来存放jar包的地方,它一般可以分为三种:本地仓库,远程仓库(私服),中央仓库。本地仓库即你自己电脑里存放jar包的地方,不过你电脑里不可能装一万个jar包,但你的公司可以多装一点,所以一般公司都会自己配一个远程仓库给公司里一起做项目的人减少这个电脑里有这个jar包但那个人电脑里没有的情况。
但毕竟这不是全世界的jar包,你和你的公司可能还是会遇到没有的jar包,所有全世界都有共有一个中央仓库,大致示意图如下所示:
本地仓库与远程仓库如果缺少jar包,他们的下载流程是这样的:
仓库那么大,maven又怎么知道哪个jar包在哪呢,所以需要maven坐标,也就是每一个jar包都有一个自己的坐标,类似现实的坐标系xyzt那样,但它是通过jar包的名称,开发jar包的公司,jar包的版本号,以及你想使用这个jar包的范围来确定你要使用什么jar包,该处具体的配置将在后文讲述。
如何使用Maven
2020版本的idea已经绑定了maven,但如果使用了其他ide的话就没那么开心了,所以这里讲自己如何配置maven。
maven下载与环境配置
Maven版本一直在更新,就不直接提供下载了,自己去http://archive.apache.org/dist/maven/maven-3/
下载也非常快,然后就是jdk和maven有个版本对应的关系可以注意一下http://maven.apache.org/docs/history.html
将maven压缩包解压到你所需要的路径下,然后里面有四个文件夹,主要的作用如下图所示:
同样我们也要像jdk一样配置它的环境变量,操作就合在一起讲了大家应该很熟悉了:
然后在cmd中敲入mvn -v如果出现了版本号等信息,那么就说明环境配置成功了:
如果都按照以上步骤配置却没有出现的话,可以尝试一下把Path中的路径修改成%SystemRoot%\system32;%MAVEN_HOME%\bin
maven配置文件修改
接着就是告知maven我们本地仓库的路径,好让它找到我们想用的jar包们。这里我给大家提供一个包含一些常用jar包的本地仓库:链接:https://pan.baidu.com/s/1cCtyMgJjBhC4mdUvGCX9Pg 提取码:jtno
把本地仓库放在你想放的路径下之后,打开刚解压完的maven文件夹,在conf文件夹下修改settings.xml文件中的第53行,也就是告诉maven我们的本地仓库在哪里,把绝对路径放进localRepository。
有的时候从中央仓库下载jar包会花费很长时间,有的人会选择国内阿里的镜像来进行下载,具体可参考:https://blog.csdn.net/qq_36090463/article/details/89049938(转载)
maven的使用(以超简单servlet跳转为例)
上面结束之后,我们打开idea看看到底咋用maven。新建一个Project,左侧选择Maven,若勾选了上面的框框则意味着可以选择maven帮你创建好的骨架,我们可以先选择webapp这一个骨架看一看:
下一步之后可以给自己的项目设置坐标,按照框下的提示设置就可:
再下一步,我们把idea自带的maven给拿走,选择我们自己刚解压开的maven,然后将下面两个框也设置成自带maven的setting.xml和本地仓库的位置。
第一次建项目的会可能会花的时间较长,但如果下载成功后,webapp骨架出来的文件夹会有这些:
我们还可以看一眼用quickstart骨架建出来的项目有哪些内容,它包含main下的java放核心 代码,以及test文件夹下放的测试代码:
但一般来说,一个maven项目的标准目录结构为:
- src/main/java ----------- 核心代码部分
- src/main/resources ----------- 配置文件部分
- scr/test/java ----------- 测试代码部分
- scr/test/resources ----------- 测试配置文件
- src/main/webapp ----------- 页面资源
接着我们尝试在maven工程下创建一个servlet实现跳转到jsp的超级简陋的demo:
我们可以基于刚刚webapp出来的骨架填些文件夹,在main下面来一个java文件夹并右键选择Mark directory as --> Source Root,然后创建一个package,里面的java文件可以先不用创建,然后在webapp里面放一个hello.jsp随便写点东西:
然后要实现servlett跳转的话我们需要使用servlet-api,jsp-api,以及tomcat-servlet-api,如果不使用maven的话,这个时候我们就在导包了,但是使用maven的话!我们只要找到这个项目下的pom.xml!!
通过这个配置文件,我们把jar包坐标统统告诉它,内容如下所示:
其中补充一个知识点,就是scope中的内容代表什么,比如使用servelt-api时,由于maven自带的jar包中也有同名的,所以当运行时也使用的话可能会造成jar包冲突,导致maven不知道该使用哪一个:
类型 | 编译时 | 测试时 | 运行时 | 例如 |
---|---|---|---|---|
compile | √ | √ | √ | spring-core |
test | √ | Junit | ||
provided | √ | √ | servlet-api | |
runtime | √ | √ | JDBC | |
system | √ | √ | 本地除Maven仓库之外的类库 |
jar包坐标设置好之后我们就可以去java目录下创建一个servlet类,然后转发到我们的hello.jsp页面:
基本上代码内容就结束了,我们可以开始用maven的一键构建来运行一下。先找到idea边框上的maven:
然后看到了清晰的Lifecycle,知识点补充又来了,maven也是有生命周期的(啥玩意没生命周期呢),它还有仨生命周期:默认生命周期、清理生命周期、站点生命周期(不常用不说)。
- 默认生命周期包括:compile、test、package、install、deploy。
- 使用compile可以把src中main下的java文件进行编译,放到了项目自动新增的target目录下;
- test是在compile基础上还编译了test文件下的java,同样将结果放在target下;
- package是在test的基础上,还将项目打包,打成什么类型的包的话需要在pom.xml中的packaging标签下指定打包类型;
- install在package基础上,还把打包的文件放在了本地仓库里;
- deploy是将打包的文件放入远程仓库,需要在maven的setting.xml中配置远程仓库的用户名和密码,还需要pom.xml做配置;
- 清理生命周期只有一个clean:一般在你接手别人的项目的时候,可能包含了别人的编译后的文件(也就是target目录),那如果你在原本就有编译文件的基础上再编译可能会造成一些版本所带来的问题,clean的话就帮你清除了这些文件,将项目干干净净地给你。
每个命令都对应着一个插件,可以在pom.xml中看到:
如果要使用这些命令的话,我们直接点击idea所提供的即可,也可以自己输入mvn 你的命令。
(知识点补充结束!)
那要运行servlet的话我们一定要运行tomcat,如果你的jdk是1.8版本的话需要使用tomcat7来运行,而maven自带的tomcat是6所以可能在你运行的时候会出错,这个时候你可以现在pom.xml里添加一个tomcat7的插件:
然后在前前张图中找到“m”的按钮,这样你可以输入新的命令,在里面输入tomcat:run,如果提示tomcat运行错误的话,可以再试一下用tomcat7运行。
运行成功之后可以在对话框中看到:
这个时候你点击localhost的网页并加上你servlet的路径,就可以直接跳转到你之前的hello.jsp页面上了!
以上就是所有内容。