Maven之WHY、WHAT、HOW问题
为什么使用Maven(WHY)
关于为什么要使用Maven的问题应该从目前的技术在开发中存在的问题说起
目前开发中存在的问题
-
一个项目就是一个工程
-
如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作
-
借助于maven就可以将项目拆分成多个工程
-
项目中需要的jar包必须手动复制,粘贴导入到WEB-INF/lib目录下
-
带来的问题:同样的jar包重复的出现在不同的项目工程中,一方面浪费储存空间,另外也让工程比较臃肿
-
借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程引用这个文件接口即可,并不需要真正的把jar包复制过来
-
Jar包需要从别人替我们准备好或者到官网下载
-
不同技术的官网提供的jar包下载形式是五花八门的
-
有些技术的官网就是通过Maven和SVN提供下载的
- 如果是以非正规的方式下载的jar包,那么内容可能是不正规的
-
借助于Maven可以以一种规范的方式下载jar包,因为所有的知名框架或第三方工具的jar包以及按照同一的规范存放在Maven的中央仓库中
-
-
一个jar包依赖的其他jar包需要自己手动加入到项目中
基于以上这几点原因,使用Maven来管理我们的项目就变得非常重要了。而这也算是为什么使用Maven的原因
Maven是什么(WHAT)
既然已经决定了要用Maven,那么首先应该了解下什么是Maven
首先,Maven是一款服务于java平台的自动化构建工具
最开始的时候是从Make发展到了Ant然后是Maven再后来是Gradle,虽然Gradle会好一些,然是由于现在仍然有大量的项目在使用Maven,所以学习Maven仍旧是非常重要的
构建
提到Maven,就不得不提到由此引出的一个概念——构建了
概念
以”Java源文件”、”框架配置文件”、”JSP”、”HTML”、”图片”等资源为”原材料”去”生产”一个可以运行的项目的过程
编译
Java源文件[User.java] --> Class字节码文件[User.class] --> 交给JVM去执行
部署
一个BS项目最终运行的并不是Web工程本身,而是这个Web工程“编译的结果”
说道这个编译的结果就得提一提这个项目目录的问题,在开发的时候,我们在处理到涉及文件路径的问题时总是觉得不对劲,不是感觉目录多了就是感觉目录少了,其实这种感觉并没有错,只是因为程序在执行的时候的目录跟我们编写项目时的目录是不一致的,下面一张图就解释了web目录被编译后得到的目录
上图可以看到,src下的java文件都被放到了WEB-INF/classes里面了。原来的WebContent放到了整个项目的根目录下。这样的结构显然是与开发的时候不一致的,因此总会觉得目录多了或者是少了
怎样使用Maven(HOW)
了解了什么是Maven后,接下来就该使用Maven了,那么在使用之前首先应该是安装了
安装Maven
安装Maven其实只需要安装Maven的核心程序即可,安装核心程序只需要将核心程序的压缩包解压即可使用,下面是安装步骤
- 检查JAVA_HOME环境变量
- 解压Maven核心程序的压缩包,放在一个非中文无空格路径下
- 配置Maven相关的环境变量
- 首先配置MAVEN_HOME或者是M2_HOME(推荐):这个就是跟JAVA_HOME类似,将值设置为Maven核心程序所在的目录即可
- path:在path中配置Maven核心程序的bin目录,即%M2_HOME%\bin
经过上面几个步骤后,Maven就算安装完成了,最后只需要测试一下看看是否安装成功即可
验证:在DOS窗口运行 mvn -v 命令来查看Maven的版本
出现如上图结果即表示Maven安装成功
创建Maven工程
Maven可以通过IDE去创建,但是为了熟悉Maven工程的目录结构,这里使用手动创建目录的方式去创建Maven工程
创建约定的目录结构
- 根目录:工程名
- src目录:源码
- pom.xml文件:Maven工程的核心配置文件
- main目录:存放主程序
- test目录:存放测试程序
- java目录:放java源文件
- resources目录:存放框架或者其他工具的配置文件
为什么要遵守约定的目录结构呢?
- Maven要负责我们这个项目的自动化构建,以编译为例,Maven想要自动进行编译,那么它必须知道java源文件保存在哪里
-
如果我们自己自定义的东西想让框架或者工具知道,有两种办法
-
以配置的方式明确告诉框架
-
遵守框架内部已经存在的约定
-
- 总之 约定>配置>编码
常用的Maven命令
创建完Maven工程后就该使用Maven的命令了,下面介绍几个常用的Maven命令
-
mvn clean:清理
-
mvn compile:编译主程序
-
mvn test-compile:编译测试程序
-
mvn test:执行测试
-
mvn package:打包
-
mvn install:安装自己写的Maven工程
-
mvn site:生成站点,即一些HTML文档