Maven基础总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/superxiaolong123/article/details/82531630

##1. 前言##
Maven是一个强大的项目管理工具,公司中Java开发的项目都是由Maven管理的,熟悉掌握Maven工具还是很有必要的,在使用过程中经常遇到不懂的问题,所以利用周末时间系统学习和总结一下,更多的从整体上来认识Maven。
##2. Maven核心##
Maven两大核心就是依赖管理项目构建
###2.1 依赖管理###
####2.1.1 依赖概念####

依赖管理就是对项目中的jar架包的管理。
依赖这个词很好理解,当你还没实现独立时,你依赖你的父母,可以利用父母的资源正常生活。一个高楼大厦项目,要建立一个高楼,需要水泥,需要砖头,需要钢铁,所以一个高楼的构建依赖于这些材料工厂。同样,一个大型的企业级项目往往基于主流的框架,也需要各种工具类,这些资源往往通过打包好的压缩文件提供给项目使用,这个项目要实现复杂的业务需求就要依赖于这些资源,它们就叫依赖包。
当然会有间接依赖的概念,如果你爸爸也是啃老族,你就间接依赖于你的爷爷奶奶0.0。

在项目中使用所需要的架包,需要从网上找到相关的依赖包下载后拷入项目,如果项目过大,所需要的依赖包过多,这些资源管理起来很不方便,大大构建项目的效率。这时候使用Maven来管理这些依赖包就方便多了。

####2.1.2 Maven依赖管理实现原理####
Maven的依赖管理如何实现让项目使用所需的依赖包呢?
个人理解可以使用互联网资源访问过程进行类比,当我们需要获取一个网站的资源信息,我们在浏览器中输入网站的网址就可以获取,这个网址就是URL(统一资源定位器),这些资源是放在某个Web服务器上。Maven项目如何获取依赖包呢?依赖包是通过坐标信息来唯一标识的,依赖包是存放在仓库中的。
这里就有两个重要概念

  • 坐标信息
<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>4.3.2.RELEASE</version>
</dependency>

一个依赖包是通过以上三个信息进行定位的,就是说Maven项目可以通过该坐标信息找到依赖包。
groupId:架包的项目名(通常是公司的域名反写)
artifactId:架包的模块名(项目名称)
version:架包的版本号(SNAPSHOT:快照版本,RELEASE正式发行版本)

  • 仓库
    仓库就是存放架包资源的地方,Maven项目可以通过坐标信息从仓库中获取到对应架包。
    可分为本地仓库和远程仓库,远程仓库一般指私服仓库和中央仓库。
    本地仓库:在Maven工具安装时候会有一个默认的仓库地址。本地仓库位于本机磁盘,可以在conf/settings配置文件中的 < localRepository >项中配置本地仓库地址。
    私服仓库:存在于局域网的服务器上,一般是公司自己构建。
    中央仓库:互联网公网地址:http://mvnrepository.com,由Apache公司的Maven团队维护,存放着几乎所有需要用到的开源架包(除了一些有版权冲突的,如Oracle数据库连接架包)
    那么Maven项目现在有一个架包的坐标信息,这里有三种类型的仓库,如何选择呢,这里的查找原则是先从本地仓库中找架包资源,本地仓库没有再从私服仓库中查找,如果私服没有构建,或者私服仓库上没有再从中央仓库中查找。如果还找不到,那项目就报错咯。
    关系如下图:
    这里写图片描述
    私服的安装需要安装Maven仓库管理器–Nexus,使用私服仓库需要在Maven安装目录下的conf/settings配置文件中配置。Nexus配置还是挺讲究的,但是一般进公司开发都早已经搭建好了私服,找同事问个私服地址配置一下即可使用。‘
    Maven项目中所需要的依赖包都存放在本地仓库中,本地仓库没有,就去私服或者中央仓库中找到然后下载到本地仓库中。本地仓库的资源是供本机中的所有Maven项目公用的。通过坐标信息怎么定位本地仓库的资源呢?
    就以该依赖信息为例:
<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>4.3.2.RELEASE</version>
</dependency>

这里写图片描述
通过Maven这种依赖管理,Maven项目就可以很容易的找到依赖架包,当然,依赖架包的管理远远没有这么简单,后续再学习依赖的继承和依赖冲突的解决。

###2.2 项目构建###
####2.2.1 Maven生命周期####
Java对象有生命周期,对象的创建,初始化,消亡等生命周期是由Java虚拟机来管理的。Maven项目也有生命周期,学习Maven项目的构建是很有必要的。
Maven的生命周期用于规划Maven命令的执行流程,再Maven中存在“三套”生命周期,每一套项目独立,互不影响,在每一套生命周期内,执行后面的命令,前面的命令会自动执行。

  • CleanLifeCycle:清理生命周期
    (clean)
  • DefaultLifCycle:默认的生命周期
    (compile,test,package,install,deploy)
  • SiteLifeCycle:站点生命周期
    (site)
    括号中是Maven命令,整个Maven项目的构建和管理就是通过这些命令实现的,学习一下这些命令的使用。
    ####2.2.2 Maven常用命令####
    拿一个简单Maven项目示范一下命令作用
    一个标准的Maven项目目录结构如下:
    这里写图片描述
    src放项目各种资源,pom指项目对象模型(Project Object Model),pom.xml是Maven的核心配置文件,是Maven项目必不可少的文件,工程的依赖信息就存放于此。
    先学习Maven默认的生命周期中的命令的使用
  • compile
    complile是编译命令,作用是将项目中的.java文件编译成.class文件。
    这里写图片描述
  • test
    test作用是执行Maven项目中src/test/java目录下的单元测试类,单元测试类名有要求,格式必须是XxxTest.java。在使用该命令时会自动执行编译的命令。
  • package
    package是一个打包命令,作用是将项目打包成一个资源包,如果是一个Java project,那么打包成jar包,如果是web project,那么打包成war包。jar可以供项目使用,war包可以部署到Web服务器上运行。
    这里写图片描述
    打包命令执行之前会自动执行compile和test命令,这是Maven生命周期的管理。
  • install
    将项目打成架包发布到本地仓库中。
    如果该项目是一个工具包,提供给本地多个项目使用,将该项目发布到本地仓库,其他的项目可以使用坐标信息来引用该项目。
    如果这个工具包需要更改,只需要更改这个工具包内容,不再需要更改引用该工具包的项目。

-deploy是将项目架包发布到远程仓库(不常用)

用一个图表示以上流程:
这里写图片描述
需要注意的是,在默认的生命周期内,执行后面的命令,前面的命令会自动执行。

清理生命周期中的clean命令是一个常用命令,作用是删除项目中的target目录,就是删除项目编译和打包生成的相关文件。

站点生命周期的site命令会生成该项目的HTML文档,这个文档会说明该项目所引用的架包信息和其他信息。这个命令一般不使用。

##3. 在eciplse中使用Maven##

  1. 安装Maven插件
    现在新版本的JavaEE的eclipse都自带了Maven插件
  2. 配置Maven程序
    不使用内置的版本(3.5.3),选择自己安装的Maven(3.3.9)
    这里写图片描述
  3. 设置user settings:指定本地仓库路径
    这里写图片描述
  4. 构建本地仓库索引
    这里写图片描述
    右击本地仓库,选择Rebuilt Indext

以上四步完成后,就可以在eclipse环境下进行maven项目的开发了。

猜你喜欢

转载自blog.csdn.net/superxiaolong123/article/details/82531630