为什么要学习Maven?
Maven是什么?
如何使用Maven?
在JavaEE开发中,我们会使用了大量的第三方框架和工具,我们在使用Jar包最常见的方式就拷贝到项目WEB-INF
目录下lib
目录下。这样就显得很麻烦,因为每次创建新的工程就需要将jar包拷贝到lib目录下,就会造成工作区中存在大量重复的文件。
当我们使用Maven后,每个jar包只在本地仓库中保存一份,需要jar包的工程只需要维护一个文本形式的jar包的引用——称之为“坐标”。节约了存储空间,项目更加轻巧,避免了重复文件太多而造成的混乱!
我们知道项目中Jar包往往不是孤立存在的,很多jar包都需要在其他jar包的支持下才能够正常工作,我们称之为jar包之间的依赖关系。例如:commons-fileupload-1.3.jar
依赖于commons-io-2.0.1.jar
,如没有IO Jar包,FileUpload
包就不能正常工作!
作为开发者,大多时候,我们是很难准确的引入这些Jar,特别是Jar很多时,达到百个,如果我们还需要手工逐一确认依赖的Jar,那将是一个复杂的工程!当我们引入Maven后,Maven就可以替我们自动的将当前jar包所依赖的其他所有jar包全部导入进来,无需人工参与,节约了大量的时间和精力。比如通过Maven导入commons-fileupload-1.3.jar
后,commons-io-2.0.1.jar
会被自动导入,作为开发者就不必了解这个依赖关系。
上面说到Jar包不足项目会无法成功运行,但其实有的时候jar包多了项目仍然无法正常工作,这就是jar包之间的冲突!当我们使用Maven时就可以自动的处理Jar包之间的冲突问题。Maven中内置了两条依赖原则:最短路径者优先和先声明者优先。
Jar包种类繁多,几乎每个jar包在其本身的官网上的获取方式都不尽相同,不规范的方式获取的jar包也往往是不规范的。
使用Maven我们可以享受到一个完全统一规范的jar包管理体系。你只需要在你的项目中以坐标的方式依赖一个jar包,Maven就会自动从中央仓库进行下载,并同时下载这个jar包所依赖的其他jar包——规范、完整、准确!一次性解决所有问题!
一个大的项目已经不可能通过package
结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是Java
工程,有的是Web
工程。利用Maven的依赖管理机制,对拆分的工程进行互相调用和访问。
拆分的工程是上层模块依赖下层,所以下层模块中定义的API都可以为上层所调用和访问!
实际生产环境,项目规模增加到一定程度,为了提升性能,可能每个模块都需运行在独立的服务器上,我们称之为分布式部署,这里同样需要用到Maven。
Maven:英文意思就是“专家”、“内行”,发音['meɪv(ə)n]
或['mevn]
,不要读作“妈文”!
Maven是一款自动化构建工具(项目构建工具),专注服务于Java平台的项目构建和依赖管理。
在JavaEE开发中,构建工具的发展也经历了一系列的变化:Make
→Ant
→Maven
→Gradle
→其他……
构建并不是创建,创建一个工程并不等于构建一个项目,构建可以理解为把maven项目进行编译!
(1)对于纯粹的Java代码,编写任何Java
代码想要执行的话就必须经过编译得到对应的.class
文件;
(2)对JavaWeb工程,当我们需要通过浏览器访问Java程序时就必须将包含Java程序的Web工程编译的结果“拿”到服务器上的指定目录下,并启动服务器才行。这个“拿”的过程我们叫部署!
(3)对于实际项目中,我们需要整合第三方框架,Web工程中除了Java程序和JSP页面、图片等静态资源之外,还包括第三方框架的jar包以及各种各样的配置文件。所有这些资源都必须按照正确的目录结构部署到服务器上,项目才可以运行!
项目构建的全过程中都包含哪些环节呢?
序号 | 构建环节 | 说明 |
---|---|---|
① | 清理 | 删除以前的编译结果,为重新编译做好准备。 |
② | 编译 | 将Java源程序编译为字节码文件。 |
③ | 测试 | 针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。 |
④ | 报告 | 在每一次测试后以标准的格式记录和展示测试结果。 |
⑤ | 打包 | 将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。 |
⑥ | 安装 | 在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。 |
⑦ | 部署 | 将打包的结果部署到远程仓库或将war包部署到服务器上运行。 |
Maven实现自动化构建,简单的说来就是它可以自动的从构建过程的起点一直执行到终点:
Maven之所以能够实现自动化的构建,与它的设计是紧密相关的。Maven的学习主要围绕它的九个核心概念展开:
(九大核心)POM、约定的目录结构、坐标、依赖管理、仓库管理、生命周期、插件和目标继承、聚合。
下面是Maven核心程序的安装和本地仓库的必要设置!
Maven是Java开发的,所以必须知道当前系统环境中JDK的安装目录!
window中DOS命令:C:\Windows\System32>echo %JAVA_HOME%
Maven官网:http://maven.apache.org/download.cgi
将下载好apache-maven-3.5.0-bin.zip
解压到本地磁盘的一个非中文无空格的目录下。
例如:E:\(001)DevelopSoftware\Maven3.5.0\apache-maven-3.5.0
系统变量配置 | 对应值 |
---|---|
M2_HOME (自定义) |
E:\(001)DevelopSoftware\Maven3.5.0\apache-maven-3.5.0 |
Path (自定义) |
%M2_HOME%\bin 或E:\(001)DevelopSoftware\Maven3.5.0\apache-maven-3.5.0\bin 注意:这个变量应该之前已经配置了,就不用新建了,用“ ; ”隔开,追加即可! |
(1)Maven默认的本地仓库:~\.m2\repository
目录(~
表示当前用户的家目录)
(2)Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。如果不能上网则无法执行Maven的具体功能。为了解决这个问题,我们可以将Maven的本地仓库指向一个在联网情况下下载好的目录(自定义目录,集成各种Jar,三方插件)。
(3)Maven的核心配置文件settings.xml
位置:
我的Maven解压目录:E:\(001)DevelopSoftware\Maven3.5.0\apache-maven-3.5.0\conf\settings.xml
(4)settings.xm
文件配置
<localRepository>E:\(001)DevelopSoftware\Maven3.5.0\repositorylocalRepository>
------------------------------------------------------------------------
<mirrors>
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
<mirrors>
------------------------------------------------------------------------
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
Maven工具环境配置完毕,可配合客户端IDE工具Eclipse或STS使用!
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!