Maven之初探索

前言

   小编最近学习了Maven,之前在项目中也有用到过,但是 对于Maven的了解还是很少。于是最近回去学习了Maven的视频。


   之前只知道Maven是用来管理jar的,只知道用Alt + F 5是用来更新jar包的。可是Maven到底是干啥的也没有深究,直到最近小编学到一个项目的时候,才觉得要好好学习Maven。


解析Maven文件

    首先是Maven的下载地址:http://maven.apache.org。


    下载之后就把它解压到一个没有中文的目录下,然后将这个Maven bin的地址配置到环境变量里。之后再到DOS命令窗口下运行 mvn -version.再配置环境变量的时候如果是在MAVEN_HOME的变量下配置的Maven bin地址,再把MAVEN_HOME配置到path的变量中,可能会出现地址解析失败的问题,所以可以直接将Maven bin的地址直接添加到path的变量值中去。可是为什么要把Maven中bin这个文件夹添加到path这个环境变量里呢?因为bin里包含了Maven运行的脚本。这些脚本用来配置Java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。


    在Maven conf这个文件夹下,有一个settings.XML文件,这个文件很重要,里面配置了全局的中央仓库地址和本地仓库地址,也就是项目中用到的jar包都会到这个文件里的本地仓库去找jar包,到这个文件里的中央仓库里下载jar包,下载的jar包都会放到这个本地仓库地址里。默认的本地仓库是${user.home}/.m2/repository。如果需要修改默认的本地仓库地址,需要把settings.xml文件复制到该文件目录下。


    再说说Maven路径下的其他两个文件夹。boot目录只包含一个文件:plexus-classworlds-2.5.2。这个文件时一个类加载器框架,它提供了丰富的语法来方便配置,Maven使用这个框架来加载自己的类库。


    lib文件夹下包含了所有Maven运行时需要的Java类库(如:Maven-core-3.5.0.jar、Maven- model-3.5.0.jar)和一些Maven用到的第三方依赖(如:commons-cli-1.4.jar)。在lib文件夹里,原本各为独立jar文件的Maven模块和第三方类库都被拆解后重新合并到了这个jar文件中,可以说,lib目录就是真正的Maven。


Maven操作命令

 1、mvn archetype generate:自动生成项目骨架

 2、mvn clean :表示运行清理操作(会默认把target文件夹中数据清理)

 3、mvn  compile:表示编译.Java文件,通过后会自动生成target文件。

 4、mvn clean  compile:表示先运行清理后再运行编译,会将代码编译到target文件夹中

 5、mvn clean test:运行清理和测试

 6、mvn clean package:运行清理、编译测试和打包

 7、mvn clean install:将打好的jar包安装到本地私服里。

 8、mvn clean deploy:运行清理和发布(发布到私服上面)


Maven概述

   说了那么多Maven的操作,可还是没给Maven下个定义。能运行能编译的,那它就是一个构建工具,同时也管理这项目信息,所以它也是项目信息管理工具。Maven是用来管理项目的,清理、编译、测试、打包和发布,以及自定义过程本身就是一件复杂的事情。那它到底是怎么和项目结合在一起的。


    少不了插件的同时,我们也应该知道pom.xml这个重量级文件。pom.xml是Maven项目的核心。Maven是通过一个坐标系统(GAV)准确地定位每一个构建(artifact)也就是通过一组坐标Maven能够找到任何一个类库(如jar文件)。Maven管理项目中散落在每个模块的项目信息,同时它为全世界的Java开发者提供了一个免费的中央仓库。通过一些Maven的衍生工具(如:Nexus),使得我们可以进行快速地搜索。只要定位了坐标,Maven就能够帮助我们自动下载,省去了手工劳动。


   那么,pom.xml文件又是去定位类库呢?GAV:groupId、artifactId、version.这三个元素定义了一个项目基本的坐标,在Maven的世界里,任何的jar、pom或war都是以基于这些基本的坐标来区分的。groupId定义当前Maven项目隶属的实际项目。artifact定义了当前Maven项目在组中唯一的ID。version指定了项目当前的版本。GAV不仅定义了当前Maven项目的基本信息,也通过GAV来说明当前项目所依赖的类库。


依赖

   说到依赖,由dependencies元素管理,其中包含了多个dependency子元素。如下面这个例子:


	<dependencies>
	  	<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
		</dependency>
       </dependencies>



   每个依赖中也可以包含多个元素。

     1、type:依赖的类型,对应于项目坐标定义的packaging。

     2、scope:依赖的范围。依赖的范围包含:

          test::在测试范围的时候依赖

          compile:在编译范围的时候依赖

          provided:在编译和测试的过程中依赖

          runtime:在运行的时候依赖

          system:系统依赖范围

     3、optional:标记依赖是否可选

     4、exclusions:用来排除传递依赖


    依赖具有传递性,所以也会有可能产生冲突,Maven也给出许多优化依赖的方案。依赖也有聚合和继承的关系,这里就不详细研究啦。至此,我们也可以知道Maven也是一个依赖管理工具。


总结

   学习下来,对于Maven了解了不少,接下来就应该是对Nexus的研究了,应该试着搭建Maven仓库。


评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值